Проблема с searchpyi.py - «Автоматизировать скучный материал с Python» - PullRequest
1 голос
/ 08 марта 2020

У меня возникли небольшие проблемы при попытке выполнить это для вывода после поиска. Не произошло ничего такого, как открытие веб-браузеров. Я делаю что-то неправильно? Ваши советы и рекомендации будут очень благодарны. Вот код, который я ввел из вышеприведенной книги:

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

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Хорошо, вот пара вещей, которые здесь

часто поисковые системы увидят, что вы сталкиваетесь с чем-то, что он считает ботом. и откажется отвечать. проверьте, есть ли у поисковой системы средство вызова, которое поддерживается, и добавьте пользовательский агент в заголовок, который вы используете во время ваших запросов http

, есть лучший способ обработки строк запроса с использованием библиотеки запросов вместо конкатенации

Таким образом, часть кода request должна выглядеть примерно так:

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 обычно работает быстрее, и вы захотите это при сканировании страницы

0 голосов
/ 04 мая 2020

Попробуйте изменить строку requests.get на следующую:

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

Запустите следующую команду из командной строки (предполагается, что имя файла Chapter 12_searchpypi.py ):

python "Chapter 12_searchpypi.py" "boring stuff"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...