正如Serket 提到的那样,OP 所需的输出并非来自 JavaScript。 OP 需要的所有数据都位于 HTML 中。
selenium 也没有任何意义,出于同样的原因,它都在 HTML 中,不是通过 JavaScript 呈现的。
其他人提到的问题之一是因为没有指定user-agent,并且您可能传递了错误user-agent,这导致了完全不同的HTML包含错误消息或类似内容。 Check out what is your user-agent.
通过user-agent:
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"
}
requests.get(YOUR_URL, headers=headers)
您还可以通过在方括号中传递属性来获取属性:
element.get('href')
# is equivalent to
element['href']
代码和example in the online IDE(CSS 选择器reference):
from bs4 import BeautifulSoup
import requests
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"
}
params = {
"q": "fus ro dah" # query
}
html = requests.get('https://www.google.com/search', headers=headers, params=params)
soup = BeautifulSoup(html.text, 'lxml')
# container with links and iterate over it
for result in soup.select('.tF2Cxc'):
link = result.select_one('.yuRUbf a')['href']
-------
'''
https://elderscrolls.fandom.com/wiki/Unrelenting_Force_(Skyrim)
https://knowyourmeme.com/memes/fus-ro-dah
https://en.uesp.net/wiki/Skyrim:Unrelenting_Force
https://www.urbandictionary.com/define.php?term=Fus%20ro%20dah
https://www.etsy.com/market/fus_ro_dah
https://www.nexusmods.com/skyrimspecialedition/mods/4889/
https://www.textualtees.com/products/fus-ro-dah-t-shirt
'''
或者,您可以使用来自 SerpApi 的 Google Search Results API 来实现相同的目的。这是一个带有免费计划的付费 API。
您的情况的不同之处在于您不需要弄清楚为什么或如何处理这样的问题,因为这部分(提取/抓取)已经为最终用户完成.需要做的只是迭代结构化 JSON 并得到你想要的。
代码:
import os
from serpapi import GoogleSearch
params = {
"engine": "google",
"q": "fus ro day",
"api_key": os.getenv("API_KEY"),
}
search = GoogleSearch(params)
results = search.get_dict()
for result in results["organic_results"]:
print(result['link'])
---------
'''
https://elderscrolls.fandom.com/wiki/Unrelenting_Force_(Skyrim)
https://knowyourmeme.com/memes/fus-ro-dah
https://en.uesp.net/wiki/Skyrim:Unrelenting_Force
https://www.etsy.com/market/fus_ro_dah
https://www.urbandictionary.com/define.php?term=Fus%20ro%20dah
https://www.textualtees.com/products/fus-ro-dah-t-shirt
https://tenor.com/search/fus-ro-dah-gifs
'''
P.S - 我有一篇博文更深入地介绍了如何抓取 Google Organic Search Results。
免责声明,我为 SerpApi 工作。