2016-08-11 86 views
1

我使用Python3urllib3来爬取和下载网站。我抓取了4000个不同域名的列表,其中大约5个我回来了HttpErrorCode - 403 - 'Forbidden'Python - urllib3在爬取网站时收到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() 

例已经拒绝了我: 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的使用完全相同的头文件,它也不能工作。我在这里做错了什么?

+0

添加util导入和PoolManager实例。 –

回答

1

您指定keep_alive=True,还增加了一个头connection: keep-alive

然后,您还可以添加一个头Connection: keep-alive(注意,以防略有差异)。这似乎是造成这个问题。修复它只是删除冗余线

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

谢谢,删除冗余头为它的前两个链接。你知道如何解决'nytimes'的链接。我只是想出了使用这个网站你必须启用cookie,也许就是这样。我怎样才能做到这一点? –

+0

*我该怎么做?*升级到[请求](http://docs.python-requests.org/en/master/)。 'requests'使用urllib3,但增加了很多友好的功能,比如自动处理cookie和SSL的能力。 –

+0

这是一个单独的问题。我知道,无论如何都会限制您每月可以阅读的文章数量,而无需购买订阅。自动请求可能会停止,但是https://github.com/kennethreitz/requests比vanilla urllib3有更好的cookie处理 –