首页 > 解决方案 > 使用 BeautifulSoup 4 从许多页面中获取多个元素

问题描述

我有几页要抓取,并且我正在获取一部分 html 代码(从每个页面),我想在其中获取另一部分代码。所以之后:

reqw = [requests.get(i) for i in ds['for_change']]
soups = [BeautifulSoup(i.content, 'html.parser') for i in reqw]

我开始从每一页收集我需要的部分代码:

li = []
for i in range(len(soups)):
    li.append(soups[i].find_all('li', attrs={'itemprop':'application'}))

结果是:

li[1]
>>>[<li itemprop="application" itemscope="" repeat="">
 >>><span itemprop="filingDate">2016-06-30</span>
 >>><span itemprop="countryCode">US</span>
 >>><span itemprop="applicationNumber">US15/199,528</span>
 >>><a href="/patent/US10059683B2/en"><span itemprop="documentId">patent/US10059683B2/en</span></a>
 >>><span itemprop="legalStatusCat">active</span>
 >>><span itemprop="legalStatus">Active</span>
 >>></li>, 
 >>>next element that is similar to previuos, ...]

当我开始尝试从这个列表中获取一些东西时,比如

li[1].find_all('a')

我收到错误

AttributeError: ResultSet object has no attribute 'find_all'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?

我的任务是获取接下来的两行

<span itemprop="countryCode">US</span>
<a href="/patent/US10059683B2/en"><span itemprop="documentId">patent/US10059683B2/en</span></a>

并且只是具体的

US
patent/US10059683B2/en

也许我可以再次使用 Beautiful Soup 到我的列表中,然后再提取一些东西来获得我需要的东西。但我相信有一些更容易做到这一点的可能性。谢谢你的帮助。我正在使用的链接示例在这里https://patents.google.com/patent/JP2020037596A/en

标签: pythonbeautifulsoup

解决方案


尝试这个:

for li_tag in li:
    span = li_tag.find('span', {'itemprop':'countryCode'}).text
    links = li_tag.find_all('a')
    print(span)
    [print(link.text) for link in links]

输出:

US
patent/US10059683B2/en

推荐阅读