【问题标题】:Convert XPath to Beautiful Soup将 XPath 转换为美丽的汤
【发布时间】:2015-08-18 15:34:53
【问题描述】:

我有一个带有标签的页面

<img alt="1ee7aca0cf5b0132dd7a005056a9545d" src="http://assets.amuniversal.com/1ee7aca0cf5b0132dd7a005056a9545d">

我知道 XPath -

//*[@id="content"]/div[2]/p/a/img

如何使用 BeautifulSoup 访问该标签并获取该标签的 src?

【问题讨论】:

    标签: python beautifulsoup


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2020-07-22
    • 2022-11-17
    相关资源
    最近更新 更多