python - 使用 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
解决方案
尝试这个:
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
推荐阅读
- spring - 如何配置 Spring Boot 应用程序在 Eclipse STS 中运行
- java - 如何在 node-red 中导入自定义 jar
- sql - 在表之间“同步”或复制
- webstorm - 使用 webstorm 调试一个 react native / expo 应用程序
- regex - 正则表达式中对 unicode 的更正
- google-workspace - 将 Android Management API 与标准 GSuite EMM 提供程序一起使用(Google 移动管理)
- javascript - 如何在 iOS 设备 (Safari) 中去抖动或限制滚动事件
- android - 如何更改按钮中的图标颜色?
- reactjs - 组件状态中的 LocalStorage
- php - 如何从最小值获取关联的行数据