此脚本假设采用命令行字符串并通过谷歌搜索引擎运行,然后如果找到结果,它将打开不同选项卡中的前5个。我有一些问题试图让它发挥作用。我认为问题发生在它所说link = soup.select(".r a")
的底部,我一直在改变这里的值,然后它将显示具有实际长度的下一行。但是像这样运行它显示长度仍为0.我试图刮掉.r类和标记,因为这似乎是搜索结果从谷歌结果源代码开始的地方。
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"))
答案 0 :(得分:1)
您的逻辑是正确的,但谷歌搜索的网址不对。
一定是
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"))
答案 1 :(得分:0)
您是对的!该问题应由select(".r a")
引起
我建议您尝试find_all('a',{"data-uch":1})
,它将找到所有具有data-uch = 1
说明:
”不过,如果您稍微看一下元素,就会有一个类似这样的元素:。在HTML源代码的其余部分中, 看起来r类仅用于搜索结果链接。”
上面的句子来自本书。但是,实际上,如果您打印此汤变量soup = bs4.BeautifulSoup(response.text, "html.parser")
,则不会发现任何<h3 class="r">`` in the HTML source code. That is why
print(len(links))```始终显示0。