Проблема Web Scraping при загрузке страницы с бесконечной прокруткой - PullRequest
1 голос
/ 16 мая 2019

Мне нужно почистить веб-сайт электронной коммерции, который загружает 45 продуктов на первой странице, а затем загружает дополнительно 45 продуктов при прокрутке до конца страницы.

Я использую Python - Selenium Web Driver для очистки этой страницы.

Кажется, что Ajax заменяет контейнер при каждой последующей перезагрузке и, следовательно, не может извлечь все данные после загрузки всех продуктов.

Прикрепление кода для вашей ссылки.пожалуйста, покажите мне, как очистить все продукты

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import pandas
from numpy import long

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

driver = webdriver.Chrome()
html=driver.get("https://www.ajio.com/women-jackets-coats/c/830316012")
assert 'Ajio' in driver.title
content = driver.find_elements_by_class_name('item')
totalitems=long(driver.find_element_by_class_name('length').text.strip(' Items Found').replace(',','',10))

loop_count=int(((totalitems-len(content))/len(content)))

print(loop_count)

data=[]
row=['Brand','Description','Offer_Price','Original_Price','Discount']
data.append(row)

for i in range(1,loop_count):
    content = driver.find_elements_by_class_name('item') 
    print(i)
    print(len(content))

    for item in content:
        row=[]
        row.append(item.find_element_by_class_name('brand').text.strip())
        row.append(item.find_element_by_class_name('name').text.strip())
        row.append(item.find_element_by_class_name('price').text.strip().strip('Rs. '))
        try:
            row.append(item.find_element_by_class_name('orginal-price').text.strip('Rs. '))
        except NoSuchElementException as exception:
            row.append(item.find_element_by_class_name('price').text.strip('Rs. '))

        try:
            row.append(item.find_element_by_class_name('discount').text.strip())
        except NoSuchElementException as exception:
            row.append("No Discount")

        data.append(row)
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight-850);")
    try:
        myElem = WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.CLASS_NAME, 'loader')))
    except TimeoutException:
        print("Loading took too much time!")



df = pandas.DataFrame(data)
df.to_csv("C:\Ajio.csv", sep=',',index=False, header=False, mode='w')   #mode='a' for append

1 Ответ

1 голос
/ 16 мая 2019

Похоже, проблема в том, что у вас есть несогласованность в данных, которые вы очищаете в результате последующих перезагрузок / прокрутки.

Одним из решений было бы сохранение структуры данных выше области действия этой функции, которая бы записывала элементы, которые вы видели до сих пор. Когда страница перезагружается / прокручивается, вы можете проверить, существует ли каждый элемент в структуре данных, и не добавляет ли он его в структуру, пока не убедитесь, что попали в каждый возможный элемент на странице.

Удачи!

...