Ошибка HTTP ConnectionPool: настройка прокси-сервера для выполнения очистки в Instagram через Selenium Webdriver в Python - PullRequest
0 голосов
/ 01 апреля 2020
  • ОС: MacOS Catalina 10.15.4

  • Браузер: Chrome Версия браузера: 80.0.3987.162

  • Версия драйвера браузера: ChromeDriver Версия 80

  • Версия языковых привязок: Python 3.7.6

  • Использование: Python, пакет Selenium , urllib3, http_request_randomizer.requests.proxy.requestProxy

Моя цель - создать сканер комментариев instagram.

Есть шаги, которые я сделал до сих пор: Я создал код, который сначала извлекает ссылки на посты Instagram, а затем добавляет все комментарии в список. С базовым c Chromedriver (без добавления прокси) он, кажется, работает, никаких ошибок вообще нет:

 #finding all links 
posts = []
browser= webdriver.Chrome('/Users/maria/desktop/chromedriver')
browser.get('https://www.instagram.com/titovby/?hl=ru')
posts = browser.find_elements_by_xpath("//div[@class='v1Nh3 kIKUG  _bz0w']")
links = [elem.find_element_by_css_selector('a').get_attribute('href') for elem in posts]
print(links)
#add comments to the list
notSorted =[]
for link in links: 
 browser.get(link)
 allComments = browser.find_elements_by_xpath("//div[@class='C4VMK']")
 for comment in allComments:
    print(comment.text)
    notSorted.append(comment.text.split('Ответить'))

Здесь я не добавил прокрутку для динамически генерируемой страницы, поэтому этот код захватывает только около 6 постов и комментирует их. Это, конечно, не будет работать для большего набора данных и в некоторый момент вызовет sh, поскольку все запросы поступают с одного хоста. Чтобы решить эту проблему, я решил составить список прокси-серверов и менять их каждую шестую итерацию.

from http_request_randomizer.requests.proxy.requestProxy import RequestProxy
req_proxy = RequestProxy() 
proxies = req_proxy.get_proxy_list() #this will create proxy list

С помощью этого кода мне удалось собрать asp комментариев для первых шести, однако после этого он продолжает показывать «Этот сайт недоступен», в результате чего HTTPConnectionPool (host = '127.0.0.1', port = 55765): максимальное количество повторных попыток превышено с url: error.

Этот метод кажется очень неэффективным (внизу), поэтому мне интересно, что не так с моим кодом, так как он плохо работает для первых 6, но не может действительно обрабатывать большие объемы. Если есть какие-либо другие методы и хорошие руководства, пожалуйста, обратитесь ко мне.

notSorted = []
index_proxy = 0
PROXY = proxies[index_proxy].get_address()
webdriver.DesiredCapabilities.CHROME['proxy']={
    "httpProxy":PROXY,
    "ftpProxy":PROXY,
    "sslProxy":PROXY,
    "noProxy":None,
    "proxyType":"MANUAL",
    "class":"org.openqa.selenium.Proxy",
    "autodetect":False

}
driver = webdriver.Chrome(executable_path="/Users/maria/desktop/chromedriver")
for index, link in enumerate(links, 1):
    if index % 6 == 0:
        driver.quit()
        index_proxy +=1
        PROXY = proxies[index_proxy].get_address()
        webdriver.DesiredCapabilities.CHROME['proxy']={
            "httpProxy":PROXY,
            "ftpProxy":PROXY,
            "sslProxy":PROXY,
            "noProxy":None,
            "proxyType":"MANUAL",
            "class":"org.openqa.selenium.Proxy",
            "autodetect":False
        }
        driver = webdriver.Chrome(executable_path="/Users/maria/desktop/chromedriver")
        driver.get(link)
        allComments = driver.find_elements_by_xpath(f"//div[@class='C4VMK']")
        for comment in allComments:
            print(comment.text)
            notSorted.append(comment.text.split('Ответить'))
    else: 
        driver.get(link)
        allComments = driver.find_elements_by_xpath(f"//div[@class='C4VMK']")
        for comment in allComments:
            print(comment.text)
            notSorted.append(comment.text.split('Ответить'))

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...