Webscrapping с использованием селена и не сможет перейти на следующую веб-страницу - PullRequest
0 голосов
/ 24 апреля 2018

Итак, я пытался избавиться от ZALORA , кажется, селен продолжает отбирать повторные данные .......

Вот мои коды:

from selenium import webdriver
import time

driver = webdriver.Chrome()
url = 'https://www.zalora.com.hk/men/clothing/shirt/?gender=men&dir=desc&sort=popularity&category_id=31&page=1&enable_visual_sort=1'
driver.get(url)
driver.implicitly_wait(30)

brandname=''
productTitle=''
page=0

while True:
    info_brandname = ''
    info_product_title = ''
    page=page+1

    if len(info_brandname) < 99 or len(info_product_title) < 99:
        info_brandname = driver.find_elements_by_xpath('//span[@class="b-catalogList__itmBrand fsm txtDark uc js-catalogProductTitle"]')
        info_product_title = driver.find_elements_by_xpath('//em[@class="b-catalogList__itmTitle fss"]')
        print('info_brandname ' + str(len(info_brandname)) + ' at page ' + str(page))
        print('info_product_title ' + str(len(info_product_title)) + ' at page ' + str(page))

    else:
        print('info_brandname ' + str(len(info_brandname)) + ' at page ' + str(page))
        print('info_product_title ' + str(len(info_product_title)) + ' at page ' + str(page))

    #some manipulation of the scrapped data
    for i in range(len(info_brandname)):
        brandname = brandname + '\n' + info_brandname[i].text
        productTitle = productTitle + '\n' + info_product_title[i].text

    print(brandname.split('\n')[1:])
    print(productTitle.split('\n')[1:])

Вот часть, которая, как я подозреваю, пошла не так:

    #go to the next page before it loops again
    try:
        test = driver.find_element_by_xpath("//a[@title='Next']")
        driver.execute_script("arguments[0].click();", test)
    except:
        print('there is no next page man...')

    time.sleep(2)
    print(str(driver.current_url))

driver.close()

РЕДАКТИРОВАТЬ: На данный момент самое последнее название предмета должно быть «Life8» в соответствии с веб-сайтом, но я получил «J.Crew», и я удалил в общей сложности 1885 предметов, в то время как на веб-сайте говорится, что у них только 1847 всего товаров.
URL страниц фактически менялся во время работы скрипта, вместе с элементами на каждой странице, все работает нормально, когда я вижу, что автоматизация делает свои вещи на chrome, только данные, которые удаляются селеном, странные.

РЕДАКТИРОВАТЬ 2: Я провел еще несколько исследований, я наблюдал за процессом автоматизации в веб-приводе Chrome и обнаружил, что тот же URL-адрес в веб-приводе Chrome имеет содержимое, отличное от того же URL-адреса, когда я обычно просматриваю ZALORA в обычном Chrome. Возможно ли, что веб-сайт сделал что-то, чтобы не дать людям отказаться?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Мне удалось отбросить правильные данные, изменив driver = webdriver.Chrome() на driver = webdriver.Firefox(), и это решило проблему, с которой я столкнулся. Хотя я не совсем уверен, почему это решило проблемы.

0 голосов
/ 24 апреля 2018

Мне кажется, проблема в том, что вы пытаетесь получить новый URL сразу после нажатия кнопки «Далее», в то время как для изменения URL требуется некоторое время, поэтому каждый раз, когда вы переходите на одну и ту же страницу.

На самом деле я понятия не имею, зачем вам нужно driver.get(url) в начале каждой итерации, когда вы уже переключились на следующую страницу, нажав Далее ...

Попробуйте просто удалить эту строку driver.get(url) (вывести ее из цикла) и эту url = driver.current_url

Также обратите внимание, что вы можете вызвать driver.implicitly_wait(30) только один раз в скрипте (вы можете поставить его сразу после driver = webdriver.Chrome()), и он будет применен ко всем поискам элементов ...

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