searchpyi.py 问题 - 'Automate the Boring Stuff with Python'



我在搜索后尝试为输出执行此操作时遇到了一些问题。它没有发生任何事情,比如打开网络浏览器。我做错什么了吗?非常感谢您的提示和建议。这是我从上面的书中输入的代码:

#! /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)

好的,这里有几件事

通常搜索引擎会看到你带着它认为是机器人的东西来攻击它,并拒绝回答。检查搜索引擎是否有支持的调用方法,并在r http请求期间将用户代理添加到您使用的头中

有一种更好的方法可以使用请求库而不是级联来处理查询字符串

所以代码的请求部分应该看起来像

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解析器,因为它通常更快,并且在爬网页面时您可能希望这样

当代码完全按照书(第2版(中所写的那样运行时,它不会工作。

你需要更改的一行在书中写得如下:

res = requests.get('https://google.com/search?q=' 'https://pypi.org/search/?q=' + ' '.join(sys.argv[1:]))

要使其工作,只需将代码更改为以下内容:

res = requests.get('https://pypi.org/search/?q=' + ' '.join(sys.argv[1:]))

尝试将requests.get行更改为以下行:

res = requests.get('http://pypi.org/search/?q=' + ' '.join(sys.argv[1:]))

从命令行运行以下命令(假设文件名为第12_searchpypi.py章(:

python "Chapter 12_searchpypi.py" "boring stuff"

最新更新