セレンとBeautifulSoupを使用して、ノードストロームのWebサイト用のスクリーンスクレーパーを作成しています。Webサイトは実際には名前空間にすべてのタグを持っているわけではありませんが、Firefox Webドライバーはあいまいさを避けるためにタグを作成します(具体的には、サイトには<html xmlns>
ドライバーを混乱させるように見えるタグがあります)。
したがって、すべてが名前空間に配置されますa0
。ただし、Beautiful Soupは、が呼び出されたときに、親要素と(場合によっては)1レベルの子のみを返しますfind()
。
このhtmlを例にとってみましょう。
<div class='division'>
<a href='#'>
<img />
</a>
</div>
すべてが暗黙のa0
名前空間にあるため、次のようにして画像を取得できます。
soup.find('a0:div',{'class':'division'}).find('a0:img')
ただし、これはを返しますNone
。私は目を通しsoup.prettify()
、確実にa0:img
内にあると言うことができますa0:div
。これは意図された機能(この場合、新しい方法を見つける必要があります)ですか、それともバグ(この場合、回避策が必要です)ですか?
編集:
混乱を避けるために、これはワークフロー全体を示す例です。
from selenium import webdriver
from BeautifulSoup import BeautifulSoup # Note that this is BeautifulSoup 3
b = webdriver.Firefox()
b.get("http://shop.nordstrom.com/c/womens-skirts")
borscht = BeautifulSoup(b.page_source)
theImageThatCannotBeFound = borscht.find('a0:div',{'class':'fashion-item'}).find('a0:img')
上記のコードはに設定theImageThatCannotBeFound
されていますがNone
、これは正しくないと思います。これが明らかになることを願っています。