urllib.request的urlopen无法在python 3.7中打开页面

时间:2019-06-05 12:02:32

标签: python urllib

我想写一个webscraper来收集Medium.com网页上的文章标题。

我正在尝试编写一个Python脚本,该脚本将删除Medium.com网站上的标题。我正在使用python 3.7,并从urlopen导入了urllib.request。 但是它无法打开网站并显示

 "urllib.error.HTTPError: HTTP Error 403: Forbidden" error. 
from bs4 import BeautifulSoup
from urllib.request import  urlopen

webAdd = urlopen("https://medium.com/")
bsObj = BeautifulSoup(webAdd.read())
Result = urllib.error.HTTPError: HTTP Error 403: Forbidden

预期结果是它不会显示任何错误,而只是阅读网站。

但这在我使用请求模块时不会发生。

import requests 
from bs4 import BeautifulSoup 
url = 'https://medium.com/' 
response = requests.get(url, timeout=5)

这次可以正常工作了。

为什么??

3 个答案:

答案 0 :(得分:2)

Urllib是相当古老的小型模块。对于网络抓取,建议使用requests模块。 You can check out this answer for additional information.

答案 1 :(得分:2)

如今,许多站点都在检查用户代理的来源,以试图阻止机器人。 requests是更好的模块,但是如果您真的想使用urllib,则可以更改标头文本,以假装为Firefox或其他名称,从而不会被阻止。快速示例可以在这里找到:

https://stackoverflow.com/a/16187955

import urllib.request

user_agent = 'Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion'

url = "http://example.com"
request = urllib.request.Request(url)
request.add_header('User-Agent', user_agent)
response = urllib.request.urlopen(request)

您还需要使用适当版本的东西来更改user_agent字符串。希望这会有所帮助。

答案 2 :(得分:0)

这对我有用

import urllib 
from urllib.request import urlopen
html = urlopen(MY_URL)
contents = html.read()
print(contents)