Python - urllib3在抓取网站时收到403'Forbidden'

时间:2016-08-11 16:41:18

标签: python python-3.x urllib urllib3

我正在使用Python3urllib3来抓取和下载网站。我抓了一个包含4000个不同域名的列表,其中大约5个我回来了HttpErrorCode - 403 - 'Forbidden'

在我的浏览器上,网站确实存在并正确响应。可能这些网站怀疑我是一个爬虫,并禁止我获取数据。

这是我的代码:

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

拒绝我的网站示例: https://www.uvision.co.il/http://www.medyummesut.net/

另一个不起作用的网站并引发MaxRetryError

http://www.nytimes.com/2015/10/28/world/asia/south-china-sea-uss-lassen-spratly-islands.html?hp&action=click&pgtype=Homepage&module=first-column-region&region=top-news&WT.nav=top-news&_r=1

我也试过使用Firefox使用的完全相同的标题,但它也没有用。我在这做错了吗?

1 个答案:

答案 0 :(得分:1)

您指定keep_alive=True,其中添加了标题connection: keep-alive

然后你还添加一个标题Connection: keep-alive(注意案例中的细微差别)。这似乎导致了这个问题。要修复它,只需删除冗余行

headers['Connection'] = 'keep-alive'