将 XPath 转换为美丽的汤
Posted
技术标签:
【中文标题】将 XPath 转换为美丽的汤【英文标题】:Convert XPath to Beautiful Soup 【发布时间】:2015-08-18 15:34:53 【问题描述】:我有一个带有标签的页面
<img src="http://assets.amuniversal.com/1ee7aca0cf5b0132dd7a005056a9545d">
我知道 XPath -
//*[@id="content"]/div[2]/p/a/img
如何使用 BeautifulSoup 访问该标签并获取该标签的 src?
【问题讨论】:
【参考方案1】:您可以尝试将您的 xpath 表达式转换为 CSS 选择器表达式,然后使用接受 CSS 选择器表达式参数的 BeautifulSoup select()
方法:
soup = BeautifulSoup("your html source")
result = soup.select("#content > div:nth-of-type(2) > p > a > img")
【讨论】:
这不起作用:/我得到 TypeError: 'NoneType' object is not callable 在这个答案中没有什么可以触发该异常。但是,如果 html 源不包含满足选择器的元素,result
可以是 None
。
要进行交叉检查,请尝试将soup
对象保存到文件中,并查看文件中是否包含预期的元素。您不能通过检查浏览器中的元素进行交叉检查,因为它们可能不同。某些元素可能是由 javascript 生成的(bs 不能执行 js,而您的浏览器肯定可以)【参考方案2】:
既然你对xpath已经很熟悉了,为什么不用lxml解析器,你可以直接用xpath来查找元素,这里有一个函数可以做到这一点:
from lxml import html
def find_by_xpath(element_source,xpath_expression):
root = html.fromstring(element_source)
return root.xpath(xpath_expression)
【讨论】:
我得到 'html' 没有定义。 添加这个from lxml import html
以上是关于将 XPath 转换为美丽的汤的主要内容,如果未能解决你的问题,请参考以下文章