将 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 转换为美丽的汤的主要内容,如果未能解决你的问题,请参考以下文章

如何将 CSS Selector 的输出传递给美丽的汤?

美丽的汤和提取价值

美丽的汤正则表达式

用美丽的汤刮痧数据

使用需要单击“我同意cookies”按钮的Python(美丽的汤)抓取网页?

BeautifulSoup,一碗美丽的汤,一个隐藏的大坑