Web Scraping 使用 urllib 获取错误(HTTP 错误 403:禁止访问)
Web Scraping getting error (HTTP Error 403: Forbidden) using urllib
我正在尝试对 SEC / EDGAR 财务报告进行自动网络抓取,但收到 HTTP 错误 403:禁止访问。我已经参考了类似的 Stack Overflow 表单并相应地更改了代码,但到目前为止运气不佳。
test_URL = https://www.sec.gov/Archives/edgar/data/3662/0000950170-98-000413.txt
我正在使用的代码
import urllib
def get_data(link):
hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'none',
'Accept-Language': 'en-US,en;q=0.8',
'Connection': 'keep-alive'}
req = urllib.request.Request(link,headers=hdr)
page = urllib.request.urlopen(req, timeout=10)
content = page.read().decode('utf-8')
return content
data = get_data(test_URL)
得到错误
HTTPError Traceback (most recent call last)
return result
~\Anaconda3n\lib\urllib\request.py in http_error_default(self, req, fp, code, msg, hdrs)
647 class HTTPDefaultErrorHandler(BaseHandler):
648 def http_error_default(self, req, fp, code, msg, hdrs):
--> 649 raise HTTPError(req.full_url, code, msg, hdrs, fp)
650
651 class HTTPRedirectHandler(BaseHandler):
HTTPError: HTTP Error 403: Forbidden
我也尝试过先使用 requests.get(test_URL),然后再使用 BeautifulSoup,但这并不是 return 整个文本。
还有其他我们可以遵循的方法吗?
您无需向此请求添加任何 headers。
试试这个
import requests
r = requests.get('https://www.sec.gov/Archives/edgar/data/3662/0000950170-98-000413.txt')
print(r.text)
我在使用 request
包时没有遇到任何问题。我确实需要添加用户代理,因为没有,我遇到了和你一样的问题。试试这个:
import requests
test_URL = 'https://www.sec.gov/Archives/edgar/data/3662/0000950170-98-000413.txt'
def get_data(link):
hdr = {'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Mobile Safari/537.36'}
req = requests.get(link,headers=hdr)
content = req.content
return content
data = get_data(test_URL)
我正在尝试对 SEC / EDGAR 财务报告进行自动网络抓取,但收到 HTTP 错误 403:禁止访问。我已经参考了类似的 Stack Overflow 表单并相应地更改了代码,但到目前为止运气不佳。
test_URL = https://www.sec.gov/Archives/edgar/data/3662/0000950170-98-000413.txt
我正在使用的代码
import urllib
def get_data(link):
hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'none',
'Accept-Language': 'en-US,en;q=0.8',
'Connection': 'keep-alive'}
req = urllib.request.Request(link,headers=hdr)
page = urllib.request.urlopen(req, timeout=10)
content = page.read().decode('utf-8')
return content
data = get_data(test_URL)
得到错误
HTTPError Traceback (most recent call last)
return result
~\Anaconda3n\lib\urllib\request.py in http_error_default(self, req, fp, code, msg, hdrs)
647 class HTTPDefaultErrorHandler(BaseHandler):
648 def http_error_default(self, req, fp, code, msg, hdrs):
--> 649 raise HTTPError(req.full_url, code, msg, hdrs, fp)
650
651 class HTTPRedirectHandler(BaseHandler):
HTTPError: HTTP Error 403: Forbidden
我也尝试过先使用 requests.get(test_URL),然后再使用 BeautifulSoup,但这并不是 return 整个文本。 还有其他我们可以遵循的方法吗?
您无需向此请求添加任何 headers。 试试这个
import requests
r = requests.get('https://www.sec.gov/Archives/edgar/data/3662/0000950170-98-000413.txt')
print(r.text)
我在使用 request
包时没有遇到任何问题。我确实需要添加用户代理,因为没有,我遇到了和你一样的问题。试试这个:
import requests
test_URL = 'https://www.sec.gov/Archives/edgar/data/3662/0000950170-98-000413.txt'
def get_data(link):
hdr = {'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Mobile Safari/537.36'}
req = requests.get(link,headers=hdr)
content = req.content
return content
data = get_data(test_URL)