簡體   English   中英

urllib.request 的 urlopen 無法在 python 3.7 中打開頁面

[英]urlopen of urllib.request cannot open a page in python 3.7

我想編寫 webscraper 來收集來自 Medium.com 網頁的文章標題。

我正在嘗試編寫一個 python 腳本,該腳本將從 Medium.com 網站上抓取頭條新聞。 我正在使用 python 3.7 並從urllib.request導入urlopen 但它無法打開網站並顯示

"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)

這一次它可以正常工作。

為什么 ??

Urllib 是一個非常古老的小模塊。 對於網頁抓取,推薦使用requests模塊。 您可以查看此答案以獲取更多信息。

現在許多站點都會檢查用戶代理的來源,以嘗試阻止機器人。 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 字符串。 希望這可以幫助。

這對我有用

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM