URLlib UrlOpen [WinError 10054] Существующее соединение было принудительно закрыто - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь почистить несколько фотографий с разных сайтов для своего класса по программированию.

Я использую Beautiful Soup и Urlib для этого.

Вот мой код



import json
import time
from urllib.request import urlopen, Request
from urllib.request import urlretrieve
import urllib.request

from bs4 import BeautifulSoup
import os
import re


site = "https://www.hollisterco.com/shop/us/guys-new-arrivals"


headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582"}


req = Request(url=site, headers=headers)

html = urlopen(req, timeout=30)

bs = BeautifulSoup(html, 'html.parser')
images = bs.find_all('img', {'src':re.compile('.jpg')})
count = 26
for image in images:
    try:
        #print(image["src"])

        urlretrieve(image["src"], str(count)+".jpg")
        count += 1
    except:
        continue

Этот код работает для некоторых веб-сайтов, например, www.vineyardvines.com работал просто хорошо, но это не работает для www.hollisterco.com, что я могу сделать, чтобы исправить это, вот ошибка, которую я получаю для hollisterco.com:

Traceback (most recent call last):
  File "C:/Users/momin/PycharmProjects/scraper/scraper.py", line 22, in <module>
    html = urlopen(req, timeout=30).read().decode()
  File "C:\Users\momin\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Users\momin\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 525, in open
    response = self._open(req, data)
  File "C:\Users\momin\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 543, in _open
    '_open', req)
  File "C:\Users\momin\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 503, in _call_chain
    result = func(*args)
  File "C:\Users\momin\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 1360, in https_open
    context=self._context, check_hostname=self._check_hostname)
  File "C:\Users\momin\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 1320, in do_open
    r = h.getresponse()
  File "C:\Users\momin\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 1336, in getresponse
    response.begin()
  File "C:\Users\momin\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 306, in begin
    version, status, reason = self._read_status()
  File "C:\Users\momin\AppData\Local\Programs\Python\Python37\lib\http\client.py", line 267, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "C:\Users\momin\AppData\Local\Programs\Python\Python37\lib\socket.py", line 589, in readinto
    return self._sock.recv_into(b)
  File "C:\Users\momin\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 1071, in recv_into
    return self.read(nbytes, buffer)
  File "C:\Users\momin\AppData\Local\Programs\Python\Python37\lib\ssl.py", line 929, in read
    return self._sslobj.read(len, buffer)
ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host

1 Ответ

0 голосов
/ 25 апреля 2020

Хорошо, я нашел решение.

Вот мой совет:

Используйте селен или запросы для получения содержания HTML данных.

...