该脚本假设采用命令行字符串并通过谷歌搜索引擎运行它,然后如果找到结果,它将在不同的选项卡中打开前 5 个。我在尝试让它工作时遇到一些问题。我认为问题发生在底部,它显示 link = soup.select(".r a")
,我一直在更改此处的值,然后它将显示下一行的实际长度。但像这样运行它显示长度仍然是 0。我试图抓取 .r 类和标签,因为这似乎是搜索结果在 google 结果源代码上开始的地方。
import requests
import bs4
import sys
import webbrowser
print("Googling...")
response = requests.get("https://www.google.com/#q=" + " ".join(sys.argv[1:]))
response.raise_for_status()
'''Function to return the top search result links'''
soup = bs4.BeautifulSoup(response.text, "html.parser")
'''Open a browser tab for each result'''
links = soup.select(".r a")
print(len(links))
numOpen = min(5, len(links))
for i in range(numOpen):
webbrowser.open("https://google.com/#q=" + links[i].get("href"))
最佳答案
你的逻辑是正确的,只是谷歌搜索的网址不正确。
一定是
response = requests.get("https://www.google.com/search?q=" + " ".join(sys.argv[1:]))
...
for i in range(numOpen):
webbrowser.open("https://www.google.com" + links[i].get("href"))
完整代码如下:
import requests
import bs4
import sys
import webbrowser
print("Googling...")
response = requests.get("https://www.google.com/search?q=" + " ".join(sys.argv[1:]))
response.raise_for_status()
'''Function to return the top search result links'''
soup = bs4.BeautifulSoup(response.text, "html.parser")
'''Open a browser tab for each result'''
links = soup.select(".r a")
print(len(links))
numOpen = min(5, len(links))
for i in range(numOpen):
webbrowser.open("https://www.google.com" + links[i].get("href"))
关于python - BeautifulSoup.select方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41309440/