Python: зависание urllib, ошибка тайм-аута - PullRequest
0 голосов
/ 01 марта 2020

как гласит заголовок, urlopen get застрял в открытии URL.

Код:

from bs4 import BeautifulSoup as soup  # HTML data structure
from urllib.request import urlopen as uReq  # Web client

page_url = "https://store.hp.com/us/en/pdp/hp-laserjet-pro-m404n?jumpid=ma_weekly-deals_product-tile_printers_3_w1a52a_hp-laserjet-pro-m404"

uClient = uReq(page_url)

# parses html into a soup data structure to traverse html
# as if it were a json data type.
page_soup = soup(uClient.read(), "html.parser")

uClient.close()

print(page_soup)

Проблема: Он застрял на uReq , Однако, если вы замените page_url следующей ссылкой, все будет работать нормально.

page_url= "http://www.newegg.com/Product/ProductList.aspx?Submit=ENE&N=-1&IsNodeId=1&Description=GTX&bop=And&Page=1&PageSize=36&order=BESTMATCH"

Ошибка: Ошибка тайм-аута

Как мне добиться открытия заданный URL-адрес, для целей веб-очистки?

РЕДАКТИРОВАТЬ

New Error after add of urllib.request.Request

1 Ответ

0 голосов
/ 01 марта 2020

Некоторым веб-сайтам требуется заголовок User-Agent для успешного выполнения запроса. Импортируйте urllib.request.Request и измените ваш код следующим образом

from bs4 import BeautifulSoup as soup  # HTML data structure
from urllib.request import urlopen as uReq, Request  # Web client

page_url = "https://store.hp.com/us/en/pdp/hp-laserjet-pro-m404n?jumpid=ma_weekly-deals_product-tile_printers_3_w1a52a_hp-laserjet-pro-m404"

uClient = uReq(Request(page_url, headers={
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0'
}))

# parses html into a soup data structure to traverse html
# as if it were a json data type.
page_soup = soup(uClient.read(), "html.parser")

uClient.close()

print(page_soup)

, и все будет в порядке

...