Автоматическое открытие каждого результата поиска (данные элемента-ihref)

#python #selenium #search #web-scraping #href

#python #селен #Поиск #веб-очистка #href

Вопрос:

Я довольно новичок в веб-обработке с помощью Selenium. На данный момент я создал инструмент очистки, который открывает веб-сайт с результатами поиска в торговой платформе для грузовиков, который печатает информацию, такую как цена и возраст (год). К сожалению, в базе данных не так много деталей. Например, я хотел бы также получить возраст этих грузовиков в месяцах, годах. Итак, моя цель сейчас состоит в том, чтобы инструмент не просто печатал информацию со страниц результатов поиска, он также должен иметь возможность нажимать внутри каждого результата, чтобы получить более подробную информацию.

Способ перейти на подробную страницу для получения определенного результата — это нажать на заголовок, который включает в себя:

<div data-ihref=»/daf-sattelzugmaschine-standard-xf-460/4×2-euro-6-niedersachsen/ts-vi5575257/gebrauchte.html»

Каждый элемент уникален (название заголовка), поэтому я на самом деле не знаю, как с этим бороться. Рад слышать от вас, ребята!

Прямо сейчас это выглядит так:

 import time
from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd

#def get_truck_data(browser):
    # get all elements
    names = browser.find_elements_by_class_name('font-14.bold.h3')
    prices = browser.find_elements_by_class_name('row.infos.listing-price')
    tags = browser.find_elements_by_class_name('label-secondary')
    details = browser.find_elements_by_class_name('row.infos2.hidden-gallery')

    truck_list = []
    # Loop over elements
    for i in range(0, len(names)):
        name = names[i].text
        price = prices[i].text
        tag1, tag2 = tags[i].text, tags[i 1].text
        detail = details[i].text
        truck_list.append([name, price, tag1, tag2, detail])
    return truck_list

# Start Browser
driver = webdriver.Chrome("/Users/dennisklingbeil/Downloads/chromedriver 5")

# Start Page
page = 1

 Main DataFrame
df = pd.DataFrame()

# all pages
for i in range(0, 283):
    # open Europa LKW
    url = f"https://www.europa-lkw.de/sattelzugmaschinen-standard/diesel-ohne-kran/~a1b31c68k0q3/diesel-ohne-kran.html?crn=0amp;cvf=400amp;multi_euro=5-6amp;p={page}"
    driver.get(url)
    # Get Data
    single_list = get_truck_data(driver)

    df = df.append(pd.DataFrame(single_list))

    # Increase page counter
    page  = 1
    time.sleep(2)

df = df.drop_duplicates()

df.to_excel('2020_08_20_Lkw_Europa.xlsx')```
 

Ответ №1:

Вы можете попытаться найти все вложения div с помощью классов row-listing page-break-inside -> следующий div ваш:

 results = driver.find_elements_by_xpath("//div[contains(@class,'row-listing  page-break-inside')]/div")
 

После этого вы можете просмотреть результаты.

 for ele in results:
      ele.click()
      ...
 

Пример — Не .click() просто print()

 from selenium import webdriver
driver = webdriver.Chrome(executable_path=r'C:Program FilesChromeDriverchromedriver.exe')

html_content = """
<div class="row-listing  page-break-inside  ">
        <div data-ihref="/mercedes-sattelzugmaschine-standard-actros/4x2-euro-6-hydraulikanlage-niedersachsen/ts-vi5576343/gebrauchte.html" data-follow="true" title="Mercedes Sattelzugmaschine" class="display-block decoration-none">...</div>
</div>          
          
<div class="row-listing  page-break-inside  ">
        <div data-ihref="/daf-sattelzugmaschine-standard-cf-440/4x2-euro-6-niedersachsen/ts-vi5577630/gebrauchte.html" data-follow="true" title="DAF Sattelzugmaschine" class="display-block decoration-none">...</div>
</div>  

<div class="row-listing  page-break-inside  ">
        <div data-ihref="/man-sattelzugmaschine-standard-tgx/4x2-euro-6-hessen/ts-vi5575368/gebrauchte.html" data-follow="true" title="MAN Sattelzugmaschine" class="display-block decoration-none">...</div>
</div>  
"""
driver.get("data:text/html;charset=utf-8,{html_content}".format(html_content=html_content))
results = driver.find_elements_by_xpath("//div[contains(@class,'row-listing  page-break-inside')]/div")

for ele in results:
  x=ele.get_attribute('data-ihref')
  print(x)
driver.close()
 

Вывод

 /mercedes-sattelzugmaschine-standard-actros/4x2-euro-6-hydraulikanlage-niedersachsen/ts-vi5576343/gebrauchte.html
/daf-sattelzugmaschine-standard-cf-440/4x2-euro-6-niedersachsen/ts-vi5577630/gebrauchte.html
/man-sattelzugmaschine-standard-tgx/4x2-euro-6-hessen/ts-vi5575368/gebrauchte.html