2015-11-06 78 views
1

我有以下Python代碼旨在用於網絡爬行,當我嘗試運行這一個,它是拋出我以下錯誤。 代碼Python的網絡爬行是拋出連接錯誤

import lxml.html 
import requests 
from bs4 import BeautifulSoup 

url1='http://stats.espncricinfo.com/ci/engine/stats/index.html?class=11;filter=advanced;orderby=runs;' 
url2 ='page=' 
url3 ='size=200;template=results;type=batting' 
url5 = ['http://stats.espncricinfo.com/ci/engine/stats/index.html?class=11;filter=advanced;orderby=runs;size=200;template=results;type=batting'] 
for i in range(2,3854): 
    url4 = url1 + url2 + str(i) + ';' + url3 
    url5.append(url4) 
for page in url5: 
     source_code = requests.get(page, verify=False) 
    # just get the code, no headers or anything 
     plain_text = source_code.text 
    # BeautifulSoup objects can be sorted through easy 
     soup = BeautifulSoup(plain_text, "lxml") 
     for link in soup.findAll('a', {'class': 'data-link'}): 
       href = "https://www.espncricinfo.com" + link.get('href') 
       title = link.string # just the text, not the HTML 
       source_code = requests.get(href) 
       plain_text = source_code.text 
       soup = BeautifulSoup(plain_text, "lxml") 
# if you want to gather information from that page 
       for item_name in soup.findAll('span', {'class': 'ciPlayerinformationtxt'}): 
          print(item_name.string) 

錯誤:

Traceback (most recent call last): 
    File "C:\Python34\lib\site-packages\requests-2.8.0-py3.4.egg\requests\packages\urllib3\connectionpool.py", line 559, in urlopen 
    body=body, headers=headers) 
    File "C:\Python34\lib\site-packages\requests-2.8.0-py3.4.egg\requests\packages\urllib3\connectionpool.py", line 345, in _make_request 
    self._validate_conn(conn) 
    File "C:\Python34\lib\site-packages\requests-2.8.0-py3.4.egg\requests\packages\urllib3\connectionpool.py", line 782, in _validate_conn 
    conn.connect() 
    File "C:\Python34\lib\site-packages\requests-2.8.0-py3.4.egg\requests\packages\urllib3\connection.py", line 266, in connect 
    match_hostname(cert, self.assert_hostname or hostname) 
    File "C:\Python34\lib\ssl.py", line 285, in match_hostname 
    % (hostname, ', '.join(map(repr, dnsnames)))) 
ssl.CertificateError: hostname 'www.espncricinfo.com' doesn't match either of 'a248.e.akamai.net', '*.akamaihd.net', '*.akamaihd-staging.net', '*.akamaized.net', '*.akamaized-staging.net' 

在處理上述異常,又發生了異常:

Traceback (most recent call last): File "C:\Python34\lib\site-packages\requests-2.8.0-py3.4.egg\requests\adapters.py", line 369, in send 
    timeout=timeout File "C:\Python34\lib\site-packages\requests-2.8.0-py3.4.egg\requests\packages\urllib3\connectionpool.py", line 588, in urlopen 
    raise SSLError(e) requests.packages.urllib3.exceptions.SSLError: hostname 'www.espncricinfo.com' doesn't match either of 'a248.e.akamai.net', '*.akamaihd.net', '*.akamaihd-staging.net', '*.akamaized.net', '*.akamaized-staging.net' 

在處理上述異常,另一個異常發生:

Traceback (most recent call last): 
    File "C:/Python34/intplayername.py", line 23, in <module> 
    source_code = requests.get(href) 
    File "C:\Python34\lib\site-packages\requests-2.8.0-py3.4.egg\requests\api.py", line 69, in get 
    return request('get', url, params=params, **kwargs) 
    File "C:\Python34\lib\site-packages\requests-2.8.0-py3.4.egg\requests\api.py", line 50, in request 
    response = session.request(method=method, url=url, **kwargs) 
    File "C:\Python34\lib\site-packages\requests-2.8.0-py3.4.egg\requests\sessions.py", line 471, in request 
    resp = self.send(prep, **send_kwargs) 
    File "C:\Python34\lib\site-packages\requests-2.8.0-py3.4.egg\requests\sessions.py", line 579, in send 
    r = adapter.send(request, **kwargs) 
    File "C:\Python34\lib\site-packages\requests-2.8.0-py3.4.egg\requests\adapters.py", line 430, in send 
    raise SSLError(e, request=request) 
requests.exceptions.SSLError: hostname 'www.espncricinfo.com' doesn't match either of 'a248.e.akamai.net', '*.akamaihd.net', '*.akamaihd-staging.net', '*.akamaized.net', '*.akamaized-staging.net' 

回答

4

這是由於您想要爬網的網站上的https證書配置錯誤所致。作爲一種變通方法,您可以關閉證書中的requests

requests.get(href, verify=False) 

被告知請檢查,這時候你有敏感信息的工作不是一個推薦的做法。

+0

謝謝。我按照您的建議進行了更改,並收到以下警告。 警告(來自警告模塊): 文件「C:\ Python34 \ lib \ site-packages \ requests-2.8.0-py3.4.egg \ requests \ packages \ urllib3 \ connectionpool.py」,第789行 InsecureRequestWarning ) InsecureRequestWarning:未經驗證的HTTPS請求正在進行。強烈建議添加證書驗證。請參閱:https://urllib3.readthedocs.org/en/latest/security.html –

+0

在頁面的下方,您可以找到如何禁用警告:https://urllib3.readthedocs.org/en/latest/security.html#禁用的警告 – kosii