#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