我在搜索后,想让这个执行输出,有点麻烦。它没有发生任何事情,如打开Web浏览器。我是不是做错了什么?您的提示和建议将非常感激。这是我从上面的书中输入的代码。
#! /usr/bin/env python3
# searchpypi.py - Opens several search results.
import requests, sys, webbrowser, bs4
print('Searching...') # display text while downloading the search result page
res = requests.get('https://www.duckduckgo.com/search?q='+''.join(sys.argv[1:]))
res.raise_for_status()
# TODO: Retrieve top search result links.
soup = bs4.BeautifulSoup(res.text, 'html.parser')
# TODO: Open a browser tab for each result.
linkElems = soup.select('.package-snippet')
for elem in linkElems[:5]: # first 5 elements in list
urlToOpen = 'https://pypi.org' + elem.get('href')
print('Opening', urlToOpen)
webbrowser.open(urlToOpen)
好吧,所以这里有几件事
搜索引擎通常会发现你用一些它认为是机器人的东西来进行搜索。
有一个更好的方法来处理查询字符串,使用requests库,而不是连词。
所以 请求 你的代码部分应该是这样的
import requests, sys, webbrowser
from bs4 import BeautifulSoup #save yourself on some unnecessary typing(and possible error) down the line
print('Searching...') # display text while downloading the search result page
parmas = {'q':sys.argv[1:]}
headers = {'user-agent':'Mozilla/5.0 (Linux; rv:1.0)'}
res = requests.get('https://www.duckduckgo.com/search, params=params, headers=headers)
res.raise_for_status()
最后,在使用BeautifulSoup时,你应该考虑使用
lxml
解析器而不是html.parser
因为它通常会更快,你会希望在抓取一个页面时
尝试改变 requests.get
行改为以下内容。
res = requests.get('http://pypi.org/search/?q=' + ' '.join(sys.argv[1:]))
从命令行运行以下内容(假设文件名为 第12章_searchpypi.py):
python "Chapter 12_searchpypi.py" "boring stuff"