#python #selenium #proxy
#python #selenium #прокси
Вопрос:
Я новичок в веб-очистке, поэтому, пожалуйста, простите мое невежество.
Я создал программу для очистки Zillow, и по большей части все работало нормально. Моя проблема в том, что я использую прокси-сервис под названием proxycrawl, который легко позволяет мне интегрировать прокси-серверы в мою программу. Это делается путем размещения https://api.proxycrawl.com/?token=xxxamp;url = перед моим фактическим URL. Что я заметил, так это то, что когда программа нажимает на тег «a», URL меняется на приведенный ниже пример:
Перед: Перед щелчком
После: После щелчка
Любые 11 кликов в программе или вручную приводят к тому, что сайт меняется на сайт proxycrawl, где я получаю ошибку 404. Есть идеи?
#Browser open
print(".....Opening Browser.....")
Browser = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver')
Browser.maximize_window()
#browser page
url = urllib.parse.quote_plus('https://www.zillow.com/homes/for_sale/Bakersfield-CA-93312/house,mobile,land,townhouse_type/97227_rid/35.4606,-119.037467,35.317856,-119.200888_rect/12_zm/0_mmm/')
Browser.get('https://api.proxycrawl.com/?token=xxxamp;url=' url)
print("Opening Zillow")
time.sleep(10)
last_page = int(Browser.find_element_by_xpath("""//ol[@class="zsg-pagination"]//li[last()-1]""").text)
#print last_page
page = 0
count = 0
csv_file = open('listings.csv','w')
fieldnames = ['address', 'price', 'zestimate', 'beds', 'baths', 'feet', 'desc', 'Type', 'year_built', 'heating', 'cooling', 'parking', 'lot',
'days_on_market', 'pricepsqr', 'saves', 'interior', 'spaces_amenities', 'construction', 'exterior', 'parking1', 'mls', 'other']
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
for i in range(last_page):
page = page 1
n = 0
listings = Browser.find_elements_by_xpath("""//*[@id="search-results"]/ul/li""")
for i in range(len(listings)):
n = i 1
listing_dict = {}
print("Scraping the listing number {0} on page {1}, the count is {2}".format(n, page, count))
if (count) % 11 == 0:
listings = Browser.find_elements_by_xpath('//*[@id="search-results"]/ul/li')
time.sleep(2)
try:
# Finds Listings
listings = Browser.find_elements_by_xpath("""//*[@id="search-results"]/ul/li""")
print("Looking Up listings")
# Opens Listing
listings[i].find_elements_by_tag_name('a')[0].click()
print("Opening Listing")
time.sleep(2)
# Opens "See More Tab"
Browser.find_element_by_partial_link_text('See More').click()
# Prepare for Scrape
time.sleep(2)
Я разговаривал с proxycrawl, и они заявили, что URL должен быть закодирован, что я и сделал, но безуспешно. После кодирования я ответил и получил следующее утверждение:
«Вы отправляете свои запросы в двойном кодировании и получаете ответ pc_status: 602. Эти запросы не выполняются, и вы должны их исправить. Пожалуйста, кодируйте URL-адреса только один раз, кодирование URL-адресов более одного раза приведет к сбойному запросу «.
Ответ №1:
Похоже, что страница пытается перенаправить вас относительно.
В этом конкретном случае использования вы могли бы обойти проблему кодирования, выполнив нечто подобное следующему
# https://api.proxycrawl.com/homes/for_sale/Test/one,two
x = driver.current_url
#/homes/for_sale/Test/one,two
r = x[26:]
# base url = https://api.proxycrawl.com/?token=xxxamp;url=
u = base_url r
driver.get(u)
Комментарии:
1. Попробую это сегодня вечером!