2015-09-23 18 views
10

Ich mache Web Scraping mit Selen Webdriver in Python mit Proxy.Selen Webdriver/Beautifulsoup + Web Scraping + Fehler 416

Ich möchte mehr als 10k Seiten einzelner Website mit diesem scraping durchsuchen.

Problem verwendet diesen Proxy Ich bin in der Lage, Anfrage nur für einzelne Zeit zu senden. Wenn ich eine weitere Anfrage über denselben Link oder einen anderen Link dieser Site sende, erhalte ich einen Fehler von 416 (Art von IP-Blockierung mit Firewall) für 1-2 Stunden.

Hinweis: Ich kann alle normalen Websites mit diesem Code scraping, aber diese Website hat eine Art von Sicherheit, die mich für Scraping verhindern.

Hier ist Code.

profile = webdriver.FirefoxProfile() 
profile.set_preference("network.proxy.type", 1) 
profile.set_preference(
       "network.proxy.http", "74.73.148.42") 
profile.set_preference("network.proxy.http_port", 3128) 
profile.update_preferences() 
browser = webdriver.Firefox(firefox_profile=profile) 
browser.get('http://www.example.com/') 
time.sleep(5) 
element = browser.find_elements_by_css_selector(
       '.well-sm:not(.mbn) .row .col-md-4 ul .fs-small a') 
for ele in element: 
    print ele.get_attribute('href') 
browser.quit() 

Jede Lösung ??

Antwort

5

Selen war für mich nicht hilfreich, so löste ich das Problem, indem beautifulsoup verwenden, hat die Website-Sicherheit verwendet Proxy zu blockieren, wenn Anforderung empfangen, so dass ich ändern sich ständig proxyurl und User-Agent, wenn Server angefordert Proxy blockiert.

Ich bin Einfügen mein Code hier

from bs4 import BeautifulSoup 
import requests 
import urllib2 

url = 'http://terriblewebsite.com/' 

proxy = urllib2.ProxyHandler({'http': '130.0.89.75:8080'}) 

# Create an URL opener utilizing proxy 
opener = urllib2.build_opener(proxy) 
urllib2.install_opener(opener) 
request = urllib2.Request(url) 
request.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15') 
result = urllib2.urlopen(request) 
data = result.read() 
soup = BeautifulSoup(data, 'html.parser') 
ptag = soup.find('p', {'class', 'text-primary'}).text 
print ptag 

Hinweis:

  1. Änderung Proxy und User-Agent und verwenden neueste aktualisierte Proxy nur

  2. wenige Server Ich akzeptiere nur bestimmte Ländervertreter, in meinem Fall habe ich Proxies von United Sta tes

dieser Prozess könnte ein langsamer sein, noch kann u die Daten Schrott

1

Durch die 416 Fehlerprobleme in den folgenden Links scheint es, dass einige zwischengespeicherte Informationen (Cookies möglicherweise) die Probleme erstellen. Sie können die Anfrage zum ersten Mal senden und nachfolgende Sendeanforderungen schlagen fehl.

https://webmasters.stackexchange.com/questions/17300/what-are-the-causes-of-a-416-error 416 Requested Range Not Satisfiable

keine Cookies Wahl Versuchen zu sparen, indem eine Präferenz Einstellung oder die Cookies zu löschen, nachdem jeder Anforderung senden.

profile.set_preference("network.cookie.cookieBehavior", 2);