ОС: 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('Ответить'))
Примечание. Я прочитал прочитал несколько тем, хотя почти все одновременно используют прокси. Кажется, в конфиге есть некоторые ошибки, хотя я новичок, поэтому я застрял, решая эту ошибку и находя выход.