2015-09-23 22 views
10

Proxy ile Python'da selenium webdriver kullanarak web kazıma yapıyorum.Selenium Webdriver/Beautifulsoup + Web Kazıma + Hata 416

Bu kazıma işlemini kullanarak, tek sitenin 10 k'dan fazla sayfasına göz atmak istiyorum.

Bu proxy kullanıyor Sadece bir seferlik istek gönderebiliyorum. Aynı linkte veya bu sitenin başka bir linkinde başka bir istek gönderdiğimde, 1-2 saat boyunca 416 hatası (güvenlik duvarı kullanan bir blok IP türü) alıyorum.

Not: Tüm normal sitelerin bu kodla kazıma işlemini yapabildiğim, ancak bu sitenin güvenli bir şekilde kazıma yapmamı engelliyor.

İşte 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() 

Herhangi bir çözüm ??

cevap

5

Selenyum benim için yararlı değildir, bu yüzden, web isteği aldı ne zaman vekil engellemek için güvenlik kullandı beautifulsoup kullanan sorun çözüldü, bu yüzden sürekli Sunucu istenen vekil engelleme zaman proxyurl ve User-Agent değişiyorum.

  1. değişim vekil ve User-Agent ve kullanımı son güncellenmiş vekil sadece

  2. birkaç sunucu:

    Benim burada kod

    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 
    

    Not yapıştırarak ediyorum yalnızca belirli bir ülke vekilini kabul ediyor, Benim durumumda, United Sta'dan Proxy'leri kullandım tes

bu süreç hala u verileri hurda olabilir, yavaş olabilir

1

Aşağıdaki bağlantılarda 416 hata iletilerinden geçerek, önbelleğe alınmış bazı bilgilerin (çerezler) sorunları oluşturduğu anlaşılıyor. İlk kez istek gönderebilirsiniz ve sonraki gönderim istekleri başarısız olur.

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

tercih belirtmenin veya her talebi gönderdikten sonra çerezleri silerek çerezleri kurtarmaya değil seçmeyi deneyin

.

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