URL изменяется при использовании прокси и Selenium

#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. Попробую это сегодня вечером!