2 回答

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
要從 Google 獲得正確的結(jié)果,您必須設(shè)置正確的User-Agenthttp 標(biāo)頭:
import requests
from bs4 import BeautifulSoup
user_input = input("Type in query: ")
print("Googling for keyword={}..".format(user_input))
params = {
'q': user_input,
'hl': 'en' # <-- set hl=en to obtain english only results.
}
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0'
}
google_search = requests.get("https://www.google.com/search", params=params, headers=headers)
soup = BeautifulSoup(google_search.content, 'html.parser')
print(soup.select_one('#result-stats').text)
打?。ɡ纾?/p>
Type in query: moon
Googling for keyword=moon..
About 1,720,000,000 results (0.99 seconds)

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超2個(gè)贊
查看SelectorGadgetCSS
Chrome 擴(kuò)展程序,通過(guò)在瀏覽器中單擊所需的元素來(lái)獲取選擇器。css
或者,如果您不喜歡通過(guò)命令在開發(fā)工具控制臺(tái)中進(jìn)行選擇器,則可以使用它來(lái)測(cè)試選擇器$$('SELECTOR')
。
使用css
選擇器更靈活,更易讀,嘗試使用select_one()
orselect()
bs4
方法而不是find()
/ findAll()
。CSS
選擇器參考。
params
此外,您可以像這樣傳遞 URL 查詢:
params = {
'q': 'the most amazing query in 2021',
'gl': 'hl',
}
requests.get(YOUR_URL, params=params)
代碼:
from bs4 import BeautifulSoup
import requests, lxml
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"
}
user_input = input("Type in query: ")
print(f"Googling... {user_input}")
params = {
'q': user_input,
'gl': 'hl',
}
soup = BeautifulSoup(requests.get('https://www.google.com/search', headers=headers, params=params).text, 'lxml')
print(f"Found {soup.select_one('#result-stats').text}"
.replace("About", "about")
.replace(" (", " in ")
.replace(")", ""))
---------
'''
Type in query: fus ro dah
Googling... fus ro dah
Found about 628,000 results in 0.36 seconds
'''
或者,您可以使用來(lái)自 SerpApi 的Google Organic Results API來(lái)實(shí)現(xiàn)相同的目的。這是一個(gè)帶有免費(fèi)計(jì)劃的付費(fèi) API。
您的特定示例的主要區(qū)別在于您不需要弄清楚為什么某些事情沒(méi)有按預(yù)期工作,因?yàn)樗呀?jīng)為最終用戶完成了。在這種情況下唯一應(yīng)該做的就是從結(jié)構(gòu)化的 JSON 字符串中獲取所需的數(shù)據(jù)。
集成代碼:
from serpapi import GoogleSearch
import os
user_input = input("Type in query: ")
print(f"Googling... {user_input}")
params = {
"api_key": os.getenv("API_KEY"),
"engine": "google",
"q": user_input,
"hl": "en"
}
search = GoogleSearch(params)
results = search.get_dict()
print(f"Total results: {results['search_information']['total_results']}\n"
f"Time taken: {results['search_information']['time_taken_displayed']}")
-------
'''
Type in query: fus ro dah
Googling... fus ro dah
Total results: 663000
Time took: 0.59 sec
'''
免責(zé)聲明,我為 SerpApi 工作。
添加回答
舉報(bào)