Cody Bouche 提到的问题是 dict() 没有添加任何内容。
在我看来,如果您没有将 {}(dict) 更改为 [](array),您将很难更新您的 dict。
附加到数组要简单得多(注意:我在这里可能是错的,这只是以前经验的个人意见)。
要使其以简单的方式工作,您需要将 dict 更改为 array {} --> [],然后使用 .append({}) 附加到 list()
online IDE中的代码和示例:
def google_scrape(query):
html = requests.get(f'https://www.google.com/search?q={query}', headers=headers).text
soup = BeautifulSoup(html, 'lxml')
data = []
for container in soup.findAll('div', class_='tF2Cxc'):
title = container.select_one('.DKV0Md').text
link = container.find('a')['href']
data.append({
'title': title,
'link': link,
})
print(f'{title}\n{link}')
print(json.dumps(data, indent=2))
google_scrape('english')
# part of the outputs:
'''
English language - Wikipedia
https://en.wikipedia.org/wiki/English_language
[
{
"title": "English language - Wikipedia",
"link": "https://en.wikipedia.org/wiki/English_language"
},
]
'''
如果您仍想追加到dict(),那么这是处理此问题的方法之一(仅显示 for 循环的一部分):
for container in soup.findAll('div', class_='tF2Cxc'):
data_dict = {}
title = container.select_one('.DKV0Md').text
link = container.find('a')['href']
# creates title key and assigns title value
data_dict['title'] = title
# creates link key and assigns link value
data_dict['link'] = link
print(json.dumps(data_dict, indent = 2))
# part of the output:
'''
{
"title": "Minecraft Official Site | Minecraft",
"link": "https://www.minecraft.net/en-us/"
}
'''
或者,您可以使用来自 SerpApi 的 Google Search Engine Results API 来做同样的事情。这是一个带有免费计划的付费 API。
本质上,它与上面的代码做同样的事情,但你不需要弄清楚如何做某些事情或试图了解如何抓取某些元素,它已经为最终用户完成了 @987654333 @ 输出,所以唯一需要做的就是遍历 JSON 并获得所需的输出。
要集成的代码:
from serpapi import GoogleSearch
import json
params = {
"api_key": "YOUR_API_KEY",
"engine": "google",
"q": "minecraft",
}
search = GoogleSearch(params)
results = search.get_dict()
for result in results['organic_results']:
print(json.dumps(result, indent = 2, ensure_ascii = False))
# part of the json output:
'''
{
"position": 1,
"title": "Minecraft - Aplikasi di Google Play",
"link": "https://play.google.com/store/apps/details?id=com.mojang.minecraftpe&hl=in&gl=US",
"displayed_link": "https://play.google.com › store › apps › details › id=co...",
"rich_snippet": {
"top": {
"detected_extensions": {
"skor": 46,
"suara": 4144655,
"us": 749
},
"extensions": [
"Skor: 4,6",
"4.144.655 suara",
"US$7,49",
"Android",
"Game"
]
}
}
'''
免责声明,我为 SerpApi 工作。