我正尝试构建一个程序以选择最多5个搜索结果,然后在google中搜索它们,然后在浏览器中将其打开。但是,程序中的“ soup.select('。r a')”将返回一个空列表。
import requests
import sys
import webbrowser
import bs4
res=requests.get('http://google.com/search?q='+'Python'.join(sys.argv[1:]))
res.raise_for_status()
soup=bs4.BeautifulSoup(res.text,'html.parser')
linkElements=soup.select('.r a')
linkToOpen=min(5,len(linkElements))
for i in range(linkToOpen):
webbrowser.open('https//google.com'+linkElements[i].get('href'))
该代码运行时没有任何错误,也没有任何输出,但并未像预期的那样打开带有搜索结果的浏览器。
答案 0 :(得分:0)
该页面使用了沉重的Javascript,因此通过request
获得的内容与您在浏览器中看到的并不完全一样。您可以使用此脚本从页面抓取搜索链接(它将搜索href
以/url?q=
开头的所有链接):
import requests
import bs4
res=requests.get('http://google.com/search?q=Python')
res.raise_for_status()
soup=bs4.BeautifulSoup(res.text,'lxml')
for a in soup.select('a[href^="/url?q="]'):
if 'accounts.google.com' in a['href']:
continue
print(a['href'])
打印:
/url?q=https://www.python.org/&sa=U&ved=2ahUKEwiCivuzmMDjAhVtxMQBHWfIBxYQFjAAegQIBxAB&usg=AOvVaw3TQfZO4gqXrTLm27x1qkJF
/url?q=https://www.python.org/downloads/&sa=U&ved=2ahUKEwiCivuzmMDjAhVtxMQBHWfIBxYQjBAwAXoECAcQAw&usg=AOvVaw1ktQJcwOoHkm6N4OpYlgA-
/url?q=https://www.python.org/downloads/release/python-373/&sa=U&ved=2ahUKEwiCivuzmMDjAhVtxMQBHWfIBxYQjBAwAnoECAcQBQ&usg=AOvVaw1DkCjMJbFGfNpiQw1qDBWB
/url?q=https://www.python.org/about/gettingstarted/&sa=U&ved=2ahUKEwiCivuzmMDjAhVtxMQBHWfIBxYQjBAwA3oECAcQBw&usg=AOvVaw1ih35T-Enlb7d32gyyNGvc
...and so on.