【发布时间】:2013-01-31 20:25:15
【问题描述】:
我正在使用 selenium 和 BeautifulSoup 为 Nordstrom 的网站构建一个屏幕截图。该网站实际上并没有命名空间中的每个标签,但 Firefox 网络驱动程序会创建一个以避免歧义(具体来说,该网站有一个 <html xmlns> 似乎会混淆驱动程序的标签)。
因此,所有内容都放在命名空间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,我认为这是不正确的。我希望这可以澄清。
【问题讨论】:
-
请注意
soup.find('a0:div',{'class':'division'})返回div但没有图像(或任何其他二级子级)。 -
你能提供一个具体的网址吗?
-
该特定网址不包含
<div class="division">。事实上,对页面源的简单搜索根本找不到字符串“division”的实例。 -
你可能应该假设我正在举一个类似情况的例子。试试这个:
soup.find('a0:div',{'class':'fashion-item'}).find('a0:img')
标签: python firefox selenium beautifulsoup