Просмотр списков домов с помощью Selenium - PullRequest
1 голос
/ 08 мая 2020

Я пытаюсь пройти l oop через сайт с домашними объявлениями с помощью Selenium, и у меня возникают проблемы с переходом от l oop к l oop через страницы. Страницы, представленные на веб-странице, как показано, без кнопки «Назад» или «Далее». Я не уверен, как найти общее количество страниц с объявлениями для сайта, но тестировал это в то время как l oop с 20 (видно с max_page_count = 20), поскольку я знаю, что есть по крайней мере 20 страниц списков. Я рассматриваю два (2) способа перебора страниц, но каждый из них застрял на разных этапах:

  1. use: https://www.tinyhomebuilders.com/tiny-house-marketplace/search?page= {}. Format (page) и создайте счетчик на go по страницам.
  2. используйте функцию щелчка с Selenium, чтобы щелкнуть элемент страницы, показанный на изображении.

Я проверил и знаю, что могу соскрести ценовой элемент с страницы, но обнаружил, что функция щелчка не работает.

Вот мой код:

driver_location = 'C:/Users/oefel/Downloads/geckodriver-v0.26.0-win64'
os.environ['webdriver.firefox.driver'] = driver_location 
driver = webdriver.Firefox(driver_location)
driver.get("https://www.tinyhomebuilders.com/tiny-house-marketplace/search")
driver.implicitly_wait(50)
driver.maximize_window()

tiny_house_price = []

page_count = 0
max_page_count = 20

while (page_count < max_page_count):
        html_soup = BeautifulSoup(driver.page_source, 'lxml')

        scraped_price = driver.find_elements_by_css_selector("div.card-body > div.price")
        for price in scraped_price:
                tiny_house_price.append(price.text)
        print(tiny_house_price)

        page = driver.find_elements_by_css_selector('.pagination > li > a.href').click()

        page_count += 1

Буду очень признателен за любую помощь!

Спасибо!

1 Ответ

0 голосов
/ 08 мая 2020

В этом случае вам не нужен селен для получения текста. Вы можете получить текст страницы, сделав запрос на получение страницы и получив от него html. Номер страницы передается как параметр URL, и вы можете просто пропустить через него l oop и получить требуемый вывод. Пример ниже:

import requests
from bs4 import BeautifulSoup

tiny_house_price = []

page_count = 1
max_page_count = 20

while (page_count < max_page_count):
    r = requests.get('https://www.tinyhomebuilders.com/tiny-house-marketplace/search?page={}'.format(page_count))
    html_soup = BeautifulSoup(r.text, 'html.parser')
    scraped_price = html_soup.select("div.card-body > div.price")
    for price in scraped_price:
        tiny_house_price.append(price.text.strip())
    print(tiny_house_price)

    page_count += 1

Щелчок в вашем случае не работает, поскольку селектор неверен. Вам нужно будет найти элемент по тексту ссылки и щелкнуть. Текст ссылки будет количеством страниц.

Тот же самый параметр URL-адреса страницы logi c, который использовался выше, можно использовать, если вы также хотите использовать селен. Вам просто нужно открыть веб-страницу с помощью селена, получить исходный код и перейти на новую страницу после того, как вы получите html.

...