Подтвердить что ты не робот

Selenium Webdriver/Beautifulsoup + Веб-скребок + Ошибка 416

Я делаю веб-соскабливание с помощью selenium webdriver в Python с Proxy.

Я хочу просмотреть более 10 тыс. страниц одного сайта с помощью этого скребка.

Проблема использует этот прокси. Я могу отправить запрос только на один раз. когда я отправляю другой запрос по той же ссылке или другой ссылке этого сайта, я получаю ошибку 416 (вид блока IP с использованием брандмауэра) в течение 1-2 часов.

Примечание.. Я могу выполнять очистку всех обычных сайтов с помощью этого кода, но этот сайт имеет определенную защиту, которая мешает мне очищать.

Вот код.

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

Любое решение

4b9b3361

Ответ 1

Selenium не помог мне, поэтому я решил проблему, используя beautifulsoup, сайт использовал защиту для блокировки прокси-сервера всякий раз полученный мной запрос, поэтому я постоянно изменяю proxyurl и User-Agent всякий раз, когда сервер блокирует запрашиваемый прокси.

Я вставляю свой код здесь

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

Примечание:

  • изменить прокси и User-Agent и использовать только обновленный прокси-сервер

  • несколько серверов принимают только определенный прокси-сервер страны. В моем случае я использовал Прокси из США.

этот процесс может быть медленным, все же вы можете отказаться от данных

Ответ 2

Переходя по 416 ошибкам в следующих ссылках, кажется, что некоторая кешированная информация (возможно, файлы cookie) создает проблемы. Вы можете отправить запрос в первый раз, а последующие запросы отправки не выполняются.

https://webmasters.stackexchange.com/info/17300/what-are-the-causes-of-a-416-error 416 Запрошенный диапазон не устраивает

Попробуйте не сохранять файлы cookie, установив предпочтение или удалив файлы cookie после каждого запроса на отправку.

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