Python-urllib3接收403';禁止';在抓取网站时
我正在使用Python-urllib3接收403';禁止';在抓取网站时,python,python-3.x,urllib,urllib3,Python,Python 3.x,Urllib,Urllib3,我正在使用Python3和urlib3来抓取和下载网站。我抓取了4000个不同域的列表,其中大约有5个域我得到了HttpErrorCode-403-“禁止的” 在我的浏览器上,该网站确实存在并且响应正确。可能这些网站怀疑我是一个爬虫,并禁止我获取数据 这是我的代码: from urllib3 import PoolManager, util, Retry import certifi as certifi from urllib3.exceptions import MaxRetryError
Python3
和urlib3
来抓取和下载网站。我抓取了4000个不同域的列表,其中大约有5个域我得到了HttpErrorCode
-403-“禁止的”
在我的浏览器上,该网站确实存在并且响应正确。可能这些网站怀疑我是一个爬虫,并禁止我获取数据
这是我的代码:
from urllib3 import PoolManager, util, Retry
import certifi as certifi
from urllib3.exceptions import MaxRetryError
manager = PoolManager(cert_reqs='CERT_REQUIRED',
ca_certs=certifi.where(),
num_pools=15,
maxsize=6,
timeout=40.0,
retries=Retry(connect=2, read=2, redirect=10))
url_to_download = "https://www.uvision.co.il/"
headers = util.make_headers(accept_encoding='gzip, deflate',
keep_alive=True,
user_agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0")
headers['Accept-Language'] = "en-US,en;q=0.5"
headers['Connection'] = 'keep-alive'
headers['Accept'] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
try:
response = manager.request('GET',
url_to_download,
preload_content=False,
headers=headers)
except MaxRetryError as ex:
raise FailedToDownload()
拒绝我的网站示例:
和
另一个不工作并抛出MaxRetryError
的网站是:
我还尝试使用与Firefox完全相同的头文件,但也没有成功。我在这里做错了什么吗?您指定
keep_alive=True
,这会添加一个标题连接:keep alive
然后还添加一个标题连接:keep-alive
(注意大小写的细微差别)。这似乎是问题的根源。要修复它,只需删除冗余线路
headers['Connection'] = 'keep-alive'
添加了util导入和PoolManager实例。谢谢,删除冗余头修复了前两个链接。你知道如何修复“纽约时报”链接吗。我刚刚发现,要使用这个网站,你必须启用cookies,也许就是这样。我该怎么做?我该怎么做?升级到<代码>请求使用urllib3,但增加了很多友好的功能,比如自动处理cookie和SSL。这是另一个问题。我知道《纽约时报》限制了你每月不必订阅就能阅读的文章数量。自动请求可能会被停止,但是它比普通的urllib3具有更好的cookie处理能力