我试图 抓取 一个网站进行练习,但我一直收到 HTTP 错误 403(它认为我是机器人吗)?
这是我的代码:
#import requests
import urllib.request
from bs4 import BeautifulSoup
#from urllib import urlopen
import re
webpage = urllib.request.urlopen('http://www.cmegroup.com/trading/products/#sortField=oi&sortAsc=false&venues=3&page=1&cleared=1&group=1').read
findrows = re.compile('<tr class="- banding(?:On|Off)>(.*?)</tr>')
findlink = re.compile('<a href =">(.*)</a>')
row_array = re.findall(findrows, webpage)
links = re.finall(findlink, webpate)
print(len(row_array))
iterator = []
我得到的错误是:
File "C:\Python33\lib\urllib\request.py", line 160, in urlopen
return opener.open(url, data, timeout)
File "C:\Python33\lib\urllib\request.py", line 479, in open
response = meth(req, response)
File "C:\Python33\lib\urllib\request.py", line 591, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Python33\lib\urllib\request.py", line 517, in error
return self._call_chain(*args)
File "C:\Python33\lib\urllib\request.py", line 451, in _call_chain
result = func(*args)
File "C:\Python33\lib\urllib\request.py", line 599, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden
原文由 Josh 发布,翻译遵循 CC BY-SA 4.0 许可协议
这可能是因为
mod_security
或一些类似的服务器安全功能阻止了已知的蜘蛛/机器人用户代理(urllib
使用类似于python urllib/3.3.0
的东西,它很容易被检测到 - )。尝试设置一个已知的浏览器用户代理:这对我有用。
顺便说一下,在你的代码中,你在
.read
行中的()
urlopen
行,但我认为这是一个错字。提示:由于这是练习,请选择一个不同的、不受限制的站点。也许他们正在阻止
urllib
出于某种原因……