【问题标题】:Scrape content of element with data- attribute - Python BeautifulSoup使用数据属性刮取元素的内容 - Python BeautifulSoup
【发布时间】:2021-05-03 16:45:25
【问题描述】:

我想提取位于 a-tag 元素后面的文本内容。代码如下所示:

<a data-autid="article-url" href="linkToTheWebsite">HERE STANDS THE TEXT I WANT TO EXTRACT</a>

过去这些a-tag元素没有“data-”属性,而是普通的“id”属性,提取起来超级简单。现在我不知道这应该如何工作。我试过这个,但它似乎没有做这项工作:

self.article_title = item.select_one('a', data_autid='article-url').text.strip()

知道我能做什么吗?

【问题讨论】:

    标签: python web-scraping beautifulsoup


    【解决方案1】:

    您可以使用[attr=value] CSS 选择器:

    表示属性名为attr的元素,其值为 正是


    要使用 CSS 选择器,请使用 .select_one() 方法而不是 find()

    在你的例子中:

    from bs4 import BeautifulSoup
    
    html = """<a data-autid="article-url" href="linkToTheWebsite">HERE STANDS THE TEXT I WANT TO EXTRACT</a>"""
    soup = BeautifulSoup(html, "html.parser")
    
    >>> print(soup.select_one('a[data-autid="article-url"]').text)
    HERE STANDS THE TEXT I WANT TO EXTRACT
    

    或者:如果你想使用find()

    print(soup.find("a", attrs={"data-autid": "article-url"}).text)
    

    【讨论】:

    • 遗憾的是,这两个选项都不起作用。不知道为什么。没有给出错误或任何东西,只是没有变量的内容进来
    • @NiklasKlotz 该页面可能是动态加载的。您应该改用名为 selenium 的模块。
    【解决方案2】:

    你可以试试这个:

    from lxml import html
    import requests
    
    html = requests.get('yoururl')
    tree = html.fromstring(html.content)
    yourtext = tree.xpath('//a[@data-autid="article-url"]/text()')
    

    【讨论】:

    • 为什么使用lxml? OP已标记BeautifulSoup
    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 2017-10-04
    相关资源
    最近更新 更多