searchpyi.py的问题--"用Python自动完成无聊的事情

问题描述 投票:0回答:1

我在搜索后,想让这个执行输出,有点麻烦。它没有发生任何事情,如打开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)

python beautifulsoup python-webbrowser
1个回答
0
投票

好吧,所以这里有几件事

搜索引擎通常会发现你用一些它认为是机器人的东西来进行搜索。

有一个更好的方法来处理查询字符串,使用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 因为它通常会更快,你会希望在抓取一个页面时


-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"
© www.soinside.com 2019 - 2024. All rights reserved.