Вопрос:

Почему я получаю исключение соединения для этого сценария Python?

python web-scraping beautifulsoup python-requests urllib

1200 просмотра

1 ответ

8 Репутация автора

Я писал сценарий Python для извлечения текста песни из азлирик с помощью модуля запроса. Это сценарий, который я написал:

import requests, re
from bs4 import BeautifulSoup as bs
url = "http://search.azlyrics.com/search.php"
payload = {'q' : 'shape of you'}
r = requests.get(url, params = payload)
soup = bs(r.text,"html.parser")
try:
    link = soup.find('a', {'href':re.compile('http://www.azlyrics.com/lyrics/edsheeran/shapeofyou.html')})['href']
    link = link.replace('http', 'https')
    print(link)
    raw_data = requests.get(link)
except Exception as e: 
    print(e)

но я получил исключение, заявив:

Max retries exceeded with url: /lyrics/edsheeran/shapeofyou.html (Caused by NewConnectionError('<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7fbda00b37f0>: Failed to establish a new connection: [Errno 111] Connection refused',))

Я прочитал в Интернете, что, вероятно, пытаюсь отправить слишком много запросов. Поэтому я заставил сценарий спать некоторое время:

import requests, re
from bs4 import BeautifulSoup as bs
from time import sleep
url = "http://search.azlyrics.com/search.php"
payload = {'q' : 'shape of you'}
r = requests.get(url, params = payload)
soup = bs(r.text,"html.parser")
try:
    link = soup.find('a', {'href':re.compile('http://www.azlyrics.com/lyrics/edsheeran/shapeofyou.html')})['href']
    link = link.replace('http', 'https')
    sleep(60)
    print(link)
    raw_data = requests.get(link)
except Exception as e: 
    print(e)

но не повезло!

Поэтому я попробовал то же самое с urllib.request

import requests, re
from bs4 import BeautifulSoup as bs
from time import sleep
from urllib.request import urlopen
url = "http://search.azlyrics.com/search.php"
payload = {'q' : 'shape of you'}
r = requests.get(url, params = payload)
soup = bs(r.text,"html.parser")
try:
    link = soup.find('a', {'href':re.compile('http://www.azlyrics.com/lyrics/edsheeran/shapeofyou.html')})['href']
    link = link.replace('http', 'https')
    sleep(60)
    print(link)
    raw_data = urlopen(link).read()
except Exception as e: 
    print(e)

но потом получил другое исключение, заявив:

<urlopen error [Errno 111] Connection refused>

Может кто-нибудь сказать мне, что с ним не так и как я могу это исправить?

Автор: Sourabh Khandelwal Источник Размещён: 26.04.2017 09:23

Ответы (1)


0 плюса

1549 Репутация автора

Решение

Попробуйте это в вашем веб-браузере; когда вы пытаетесь посетить http://www.azlyrics.com/lyrics/edsheeran/shapeofyou.html, это будет работать нормально, но если вы попытаетесь посетить https://www.azlyrics.com/lyrics/edsheeran/shapeofyou. HTML это не будет работать.

Поэтому удалите свою link = link.replace('http', 'https')строку и попробуйте снова.

Автор: Ari Cooper-Davis Размещён: 26.04.2017 09:40
Вопросы из категории :
32x32