2016-10-28 8 views
0

Ich benutze Jupither Notebook, um die Elemente von einer Webseite zu extrahieren. Für einige Seiten Ich erhalte ich den Inhalt der Seite laden, ist thos der Code Ich verwende:SSLError mit Scrapy in Jupyter Notebook

import requests 
from scrapy.http import TextResponse 

start_url = 'https://www.insulation-expo.com/exhibito...16_72.html?offset=0&az=B&aid=34908&return=MzY6TDJWNGFHbGlhWFJ2TGk0dU1UWmZOekl1YUhSdGJEOXZabVp6WlhROU1DWmhlajFD#content'  
r = requests.get(start_url) 
response = TextResponse(r.url, body=r.text, encoding='utf-8') 

und der Fehler Ich erhalte:

SSLError: hostname 'www.insulation-expo.com' doesn't match either of 'www.reedexpo.de', 'reedexpo.de' 

ich kann die Seite in der Schale öffnen obwohl

scrapy shell 'https://www.insulation-expo.com/exhibito...16_72.html?offset=0&az=B&aid=34908&return=MzY6TDJWNGFHbGlhWFJ2TGk0dU1UWmZOekl1YUhSdGJEOXZabVp6WlhROU1DWmhlajFD#content' 

Antwort

2

Das Problem ist, dass Ihr Kunde Server Name Indication (SNI) nicht verwenden, dh die Zielhostnamen innerhalb des SSL-Handshake sendet. Dies wird benötigt, um verschiedene Hosts auf derselben IP-Adresse innerhalb des SSL-Handshakes bereits zu unterscheiden, so dass der Server das korrekte Zertifikat bereitstellen kann. Ohne SNI erhält ein SSL-Client ein Zertifikat für www.reedexpo.de über diese IP-Adresse. Durch die Aufnahme des Hostnamens www.insulation-expo.com in den SSL-Handshake über SNI erhält der Client stattdessen das Zertifikat, das für diesen Hostnamen gültig ist.

Es gibt zahlreiche Treffer bei der Suche nach scrapy sni und aus dieser Information könnte man annehmen, dass das Problem entweder mit scrapy Version 1.0.0 (2015-06-19) oder 1.1.0 (2016-05-11) behoben werden sollte . Bitte überprüfen Sie, ob Ihre Scrapy-Version neu genug ist.