2015-09-23 28 views
10

Robię skrobanie w Internecie przy użyciu selonu w języku Python z Proxy.Selenium Webdriver/Beautifulsoup + Web Scraping + Błąd 416

Chcę przeglądać ponad 10 tys. Stron pojedynczej witryny przy użyciu tego skrobania.

Numer używa tego serwera proxy. Mogę wysłać żądanie tylko raz. kiedy wysyłam kolejną prośbę do tego samego linku lub innego linku do tej strony, otrzymuję błąd 416 (rodzaj bloku IP za pomocą firewalla) przez 1-2 godziny.

Uwaga: Jestem w stanie wykonać skrobanie wszystkich normalnych stron za pomocą tego kodu, ale ta strona ma pewne zabezpieczenia, które uniemożliwiają mi skrobanie.

Oto kod.

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

Jakieś rozwiązanie?

Odpowiedz

5

Selen nie był pomocny dla mnie, więc rozwiązać ten problem za pomocą beautifulsoup, strona wykorzystała bezpieczeństwa blokować proxy gdy otrzymał żądanie, więc jestem ciągle zmieniających proxyurl i User-Agent gdy serwer proxy blokuje żądany.

jestem wklejając mój kod tutaj

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 

Uwaga:

  1. zmiana proxy i User-Agent i wykorzystywać najnowsze zaktualizowane proxy tylko

  2. kilka serwera akceptuję tylko określony serwer proxy kraju, w moim przypadku użyłem proxy od United Sta tes

proces ten może być powolny, jeszcze u można złom dane

1

Przechodząc przez błędy 416 w poniższych linkach, wydaje się, że niektóre buforowane informacje (pliki cookie może) powoduje problemy. Możesz wysłać żądanie po raz pierwszy, a kolejne żądania wysyłania nie.

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

Staraj się nie wybiera, aby zapisać pliki cookie, ustawiając preferencje lub usuwanie cookies po każdym wysłać prośbę.

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