python - Beautifulsoup 多个 div 内容到字典
问题描述
我尝试div
在 python 的字典中获取两个的内容。主要问题是我能够获取第一个div
内容和第二个内容,但不能以正确的键:值方式。我只能拿回钥匙。因此,我知道我需要遍历内容,但我看不到我的for loop
正确。
这是我迄今为止尝试过的:
from bs4 import BeautifulSoup
import requests
url='https://www.samenvoordeklant.nl/arbeidsmarktregios'
base=requests.get(url, timeout=15)
html=BeautifulSoup(base.text, 'lxml')
regios=html.find_all('div',attrs={'class':['field field--name-node-title field--type-ds field--label-hidden field__item animated','field field--name-field-gemeenten field--type-string-long field--label-hidden field__item animated']})
for regio in regios:
print({regio.get_text(strip=True)})
结果:
{'Achterhoek'}
{'Aalten, Berkelland, Bronckhorst, Doetinchem, Montferland, Oost Gelre, Oude IJsselstreek, Winterswijk'}
{'Amersfoort'}
{'Amersfoort, Baarn, Bunschoten, Leusden, Nijkerk, Soest, Woudenberg'}
等等
我追求的结果是:
{'Achterhoek':'Aalten', 'Berkelland', 'Bronckhorst', 'Doetinchem', 'Montferland', 'Oost Gelre', 'Oude IJsselstreek', 'Winterswijk'}
{'Amersfoort':'Amersfoort', 'Baarn', 'Bunschoten', 'Leusden', 'Nijkerk', 'Soest', 'Woudenberg'}
等等。这让我之后可以pandas dataframe
更轻松地将其移动到一个。
解决方案
一个简单的方法是使用两个列表的 dict 和 zip 。注意我使用了更快的 css 选择器并避免使用完整的多值类。
import requests
from bs4 import BeautifulSoup as bs
r = requests.get('https://www.samenvoordeklant.nl/arbeidsmarktregios')
soup = bs(r.content, 'lxml')
result = dict(zip([i.text for i in soup.select('h2 a')], [i.text for i in soup.select('.field--type-string-long')]))
print(result)
# result = {k:v.split(', ') for k, v in result.items()} ##add this line at end if want list as value rather than string
示例 pprint 输出:
如果您想要一个列表作为值,您可以简单地添加最后一行:
result = {k:v.split(', ') for k, v in result.items()}
推荐阅读
- python - IDLE import subprocess SyntaxError 但不在 Mac OSX 终端中的 Python3 中
- ebay-api - eBay API 附属关系:API 响应中没有附属链接
- php - 如何匹配数组中的特定单词并在匹配时用PHP提取数组的另一部分?
- jquery - jQuery AJAX 请求导致错误且没有消息
- c++ - c++ getline函数和后台进程
- vba - 自动按下网页上的“按钮”
- wordpress - GTMetrix 忽略 Jetpack CDN
- sql - ROWID 是在 Teradata 中选择-卸载-更新行的安全方法吗?这是最快的方法吗?
- c - 如何使用 openSSL api 将公钥转换为字符串?
- mysql - 如何使用本机同步函数从 Amazon Aurora MySQL 数据库集群调用 Lambda 函数