python - BeautifulSoup.select方法

标签 python beautifulsoup

该脚本假设采用命令行字符串并通过谷歌搜索引擎运行它,然后如果找到结果,它将在不同的选项卡中打开前 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/

相关文章:

python - 如何用空格分隔符分割字符串列表?

python - 为什么 Beautiful Soup 找不到具有多个类的这个元素?

python - 处理第 6/7 页之后的 Cookie 弹出窗口

jquery - 等效于 BeautifulSoup/Python 中的 contains() 选择器

python - 在 python 中抓取表

python - 具有授权用户的基于 Django View 的缓存

python - 替换 Python 中的所有函数调用

python - 为什么 pyOpenSSL 有 OpenSSL DLL 的单独副本?

Python:从文本文件中提取主题标签

python - 用 BeautifulSoup 按摩或用 Regex 清洁