Ошибка изменения очистки страницы python с селеном - PullRequest
0 голосов
/ 27 апреля 2020

Когда я собираю данные только с одной страницы, скрипт работает отлично. Бывает, что когда я запускаю несколько страниц, lopp застревает, а данные возвращаются только со страницы 1. L oop нужно сканировать много страниц, есть идеи, как исправить код?

#library
from bs4 import BeautifulSoup
from requests import get
import pandas as pd
import re
from urllib.request import urlopen, urlretrieve
import time
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError

from selenium import webdriver

#variables
cards = []
card = {}

#tags
anuncios = soup.find('div', {'class':'ProductList-content'}).find_all('article', {'class':'ProductDisplay ProductDisplay--horizontal'})
anuncio = soup.find('article', {'class':'ProductDisplay ProductDisplay--horizontal'})
#anuncios = soup.find('div', {'class': 'ProductList ProductList'}).find_all('div',{'class':'ProductList-content'})
#anuncio = soup.find('div',{'class':'ProductList-content'})

#startTime = time.time()
#pages = int(soup.find('div', {'class':'Pagination'}).get_text().split()[6])

#function lopp
for i in range(3):
    #Obtendo o html
    ff = webdriver.Firefox(executable_path="D:/Programas/gecko/geckodriver.exe")
    ff.get('https://www.wine.com.br/browse.ep?cID=100851&pn='+str(i+1)+'&listagem=horizontal&sorter=featuredProducts-desc&filters=')
    #ff.get('https://www.wine.com.br/browse.ep?cID=100851&exibirEsgotados=false&pn='+str(i+1)+'&listagem=horizontal&sorter=featuredProducts-desc&filters=')
    html = ff.page_source
    soup = BeautifulSoup(html,'html.parser')

    for anuncio in anuncios:
        card = {}

        #Nomes dos vinhos
        nomes = anuncio.find('div', {'class': 'ProductDisplay-name'}).find_all('h2')
        vinhos = []
        for nome in nomes:
            vinhos.append(nome.get_text())
            card['vinhos'] = vinhos

    #Criando lista de cards
    cards.append(card)

1 Ответ

0 голосов
/ 28 апреля 2020

Я не уверен, какой у вас ожидаемый результат. Это немного сбивает с толку для меня, чтобы понять. Следующий код даст вам названия вин на каждой странице, которую вы загружаете. Обратите внимание, что вам не нужно повторно создавать новый веб-драйвер, вы можете повторно использовать старый.

ff = webdriver.Firefox()
for i in range(3):
    ff.get('https://www.wine.com.br/browse.ep?cID=100851&pn='+str(i+1)+'&listagem=horizontal&sorter=featuredProducts-desc&filters=')
    html = ff.page_source
    soup = BeautifulSoup(html,'html.parser')
    productList = soup.find('div', {'class': 'ProductList-content'})
    wines = productList.find_all('div', {'class': 'ProductDisplay-name'})

    for wine in wines:
        print(wine.find('h2').contents[0])
ff.quit()

Вывод:

Champagne Montaudon Brut
Chateau Oumsiyat Red Syrah 2015
Chateau Oumsiyat Red Jaspe 2014
Dark Horse The Original Cabernet Sauvignon 2017
Dark Horse The Original California Sauvignon Blanc 2018
Dark Horse The Original California Rosé 2018
Señorío De Ayud Garnacha Syrah 2018
Lidio Carraro Faces do Brasil Merlot 2017
Ropiteau Frères Les Plants Nobles Chardonnay 2018
Protos Roble D.O. Ribeira Del Duero 1.5L 2017
Bouquet Merlot 2018
Fantinel Borgo Tesis Doc Grave Cabernet Sauvignon Friuli 2017
La Combe D´Or Sauvignon Blanc 2018
Bouquet Cabernet Sauvignon 2018
Espumante Fantinel Prosecco One & Only DOC Brut 2018
Bouquet Sauvignon 2018
Champagne Veuve Clicquot Rosé Brut com Caixa Call
Champagne Veuve Clicquot Rosé Brut com Couture Box
Magnum Veuve Clicquot Brut Rose
Protos D.O. Ribera del Duero Tinto Fino 2017
Champagne Moët & Chandon Impérial Rosé Brut Magnum 1,5 L com Love Case
Champagne Veuve Clicquot Rosé Brut com Cake
Champagne Veuve Clicquot Brut 1500 ml
Champagne Moët & Chandon Ice Impérial Demi-Sec com TAG
Carpineto Dogajolo I.G.T. Toscano Rosso 2017
Dark Horse The Original Chardonnay 2017
Miguel Torres Reserva Ancestral Blend 2015
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...