查看SelectorGadget Chrome 扩展以获取CSS 选择器。
如果你想抓取 javascript 版本的 DuckDuckGo,你可以使用 request-html 或 selenium。 注意:这不是最快的解决方案。
您可以通过解析来自<script> 标记的数据来实现,但这需要更多的工作。
代码(非javascript):
import requests, lxml
from bs4 import BeautifulSoup
headers = {
'User-agent':
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582"
}
html = requests.get('https://html.duckduckgo.com/html/?q=test&kl=us-en', headers=headers)
soup = BeautifulSoup(html.text, 'lxml')
for result in soup.select('.result__body'):
title = result.select_one('.result__a').text
url = result.select_one('.result__snippet')['href'].replace('//', '')
snippet = result.select_one('.result__snippet').text
print(f"{title}\n{url}\n{snippet}\n")
-----
'''
Test | Definition of Test by Merriam-Webster
duckduckgo.com/l/?uddg=https%3A%2F%2Fwww.merriam%2Dwebster.com%2Fdictionary%2Ftest&rut=4749db61adf540ccd15b6f5aa6a68d4e6604b2c86e5bffe0a5380e06513eff93
Test definition is - a means of testing: such as. How to use test in a sentence.
...
'''
或者,您可以使用来自 SerpApi 的 DuckDuckGo Organic Results API。这是一个带有免费计划的付费 API。
不同之处在于,您在此处解析的是非 JavaScript DuckDuckGo 页面(请参阅此 URL,您将看到“最新消息”、“内联图像”结果),而 SerpApi 是解析页面的javascript版本。而唯一真正需要做的就是遍历 JSON 字符串并获取您想要的数据。
要集成的代码:
import json, os
from serpapi import GoogleSearch
params = {
"api_key": os.getenv("API_KEY"),
"engine": "duckduckgo",
"q": "fus ro dah",
"kl": "us-en"
}
search = GoogleSearch(params)
results = search.get_dict()
for result in results['organic_results']:
print(json.dumps(result, indent=2, ensure_ascii=False))
------------
'''
{
"position": 1,
"title": "Test | Definition of Test by Merriam-Webster",
"link": "https://www.merriam-webster.com/dictionary/test",
"snippet": "Test definition is - a means of testing: such as. How to use test in a sentence.",
"favicon": "https://external-content.duckduckgo.com/ip3/www.merriam-webster.com.ico"
}
...
'''
免责声明,我为 SerpApi 工作。