Загружать несколько страниц путем разметки веб-страниц python - PullRequest
0 голосов
/ 20 июня 2020

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

from urllib.request import urlopen as uReq
from requests import get
from bs4 import BeautifulSoup as soup
import tablib 


my_url = 'https://www.xxxxxx.com/food-processors/pr?sid=j9e%2Cm38%2Crj3&page=1'

uClient2 = uReq(my_url)
page_html = uClient2.read()
uClient2.close()

page_soup = soup(page_html, "html.parser")

containers11 = page_soup.findAll("div",{"class":"_3O0U0u"}) 

filename = "FoodProcessor.csv"
f = open(filename, "w", encoding='utf-8-sig')
headers = "Product, Price, Description \n"
f.write(headers)

for container in containers11:
    title_container = container.findAll("div",{"class":"_3wU53n"})
    product_name = title_container[0].text

    price_con = container.findAll("div",{"class":"_1vC4OE _2rQ-NK"})
    price = price_con[0].text



    description_container = container.findAll("ul",{"class":"vFw0gD"})
    product_description = description_container[0].text


    print("Product: " + product_name)
    print("Price: " + price)
    print("Description" + product_description)
    f.write(product_name + "," + price.replace(",","") +"," + product_description +"\n")

f.close()

Ответы [ 3 ]

1 голос
/ 20 июня 2020

Вы должны проверить, существует ли кнопка перехода на следующую страницу. Если да, то верните True, go на эту следующую страницу и начните очистку, если нет, верните False и перейдите к следующему контейнеру. Сначала проверьте имя класса этой кнопки.

# to check if a pagination exists on the page:
    
    def go_next_page():
        try:
            button = driver.find_element_by_xpath('//a[@class="<class name>"]')
            return True, button
        except NoSuchElementException:
            return False, None
0 голосов
/ 29 июня 2020
try:
        next_btn = driver.find_element_by_xpath("//a//span[text()='Next']")
        next_btn.click()
    except ElementClickInterceptedException as ec: 
        classes = "_3ighFh"
        overlay = driver.find_element_by_xpath("(//div[@class='{}'])[last()]".format(classes))
        driver.execute_script("arguments[0].style.visibility = 'hidden'",overlay)
        next_btn = driver.find_element_by_xpath("//a//span[text()='Next']")
        next_btn.click()
    
    except Exception as e:
        print(str(e.msg()))
        break
except TimeoutException:
    print("Page Timed Out")

driver.quit ()

0 голосов
/ 20 июня 2020

Сначала вы можете получить количество доступных страниц и выполнить итерацию для каждой из страниц и проанализировать данные соответственно.

Например, если вы измените URL-адрес по отношению к странице

...