我正在使用 selenium 和 BeautifulSoup 为 Nordstrom 的网站构建一个屏幕截图。该网站实际上并没有命名空间中的每个标签,但 Firefox 网络驱动程序会创建一个以避免歧义(具体来说,该网站有一个<html xmlns>
标签似乎会混淆驱动程序)。
因此,所有内容都放在了 namespace 中a0
。find()
但是,Beautiful Soup 仅在调用时返回父元素和(有时)一级子元素。
以这个 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
,我认为这是不正确的。我希望这可以澄清。