[英]urllib is not defined - cannot import "urllib.request import urlopen"
[英]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.