Я очищаю несколько веб-страниц, которые дают те же результаты, что и первая страница в Python селене. В чем будет причина? - PullRequest
0 голосов
/ 13 марта 2020

Я перебираю goodreads.com, используя Селен и Красивый суп. Я могу получить результаты для первой страницы. Когда я даю URL для второй страницы, он загружает первую страницу и дает только результаты первой страницы. Я пробовал с разных страниц и все загружает только первую страницу. В чем может быть причина и как это преодолеть?


from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.firefox.options import Options
import pandas as pd
import time
import re
import requests
from itertools import zip_longest
from webdriver_manager.chrome import ChromeDriverManager

# First-page site URL: https://www.goodreads.com/shelf/show/business?page=1

driver = webdriver.Chrome(ChromeDriverManager().install())
# Reading the second page
driver.get("https://www.goodreads.com/shelf/show/non-fiction?page=2")
time.sleep(3)

summaryItems = driver.find_elements_by_xpath("//a[contains(@class, 'bookTitle')]")
job_links = [summaryItem.get_attribute("href") for summaryItem in summaryItems]


for job_link in job_links:
    driver.get(job_link)

    #Closing the pop-up window
    try:
        close = driver.find_elements_by_class_name('gr-iconButton')
        close.click()

    except:

        close = "None"
    try:
        # Taking book description
        more = driver.find_element_by_css_selector("#description > a:nth-child(3)").click()
        soup = BeautifulSoup(driver.page_source, 'html.parser')
        #for item in soup.findAll("span", id=re.compile("^freeText"))[:2]:
        #    print(item.text)
        sections = soup.findAll("span", id=re.compile("^freeText"))[:2]
        print("message ")
        i = 0
        for item in soup.findAll("span", id=re.compile("^freeText"))[:2]:
            i = i+1
            if i == 2:
                desc.append(item.text)

    except:

        more = "None"

    try: # Taking book title
               # time.sleep(2)
        job_title = driver.find_element_by_xpath("//h1[@class='gr-h1 gr-h1--serif']").text
                #job_title = driver.find_element_by_id('bookTitle').find_element_by_class_name('gr-h1 gr-h1--serif').text
        title.append(job_title)
                #print(title)

    except:
        job_title = "None"

        #Taking Author name

    try:
               # time.sleep(2)
        authors = driver.find_element_by_xpath("//a[@class='authorName']").text
        author.append(authors)
                    #print(author)

    except:
        authors = "None"

        #Taking Ratings

    html = driver.page_source
    soup = BeautifulSoup(html, 'html.parser')

    rate = soup.find("span", itemprop="ratingValue").text.strip()
    rates = rate.replace('\n','')

    rating.append(rates)


driver.close()

Вывод:

Я могу очистить название книги, имя автора, описание книги и рейтинг только для первой страницы.

1 Ответ

1 голос
/ 13 марта 2020

Сначала необходимо войти в систему, чтобы удалить данные на другой странице.

Попробуйте добавить следующий код в ваш скрипт:

driver = webdriver.Chrome(ChromeDriverManager().install())

# Add below code after webdriver.Chrome()
driver.get("https://www.goodreads.com/user/sign_in")
time.sleep(5)
driver.find_element_by_css_selector("#user_email").send_keys("your email")
driver.find_element_by_css_selector("#user_password").send_keys("your password")
driver.find_element_by_xpath("//input[@type='submit' and @value='Sign in']").click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...