Я использовал селен лома сайт прокруткой и дирижировал код нижеСелен найти все элементы с помощью XPath
import requests
from bs4 import BeautifulSoup
import csv
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import unittest
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time
import unittest
import re
output_file = open("Kijubi.csv", "w", newline='')
class Crawling(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.set_window_size(1024, 768)
self.base_url = "http://www.viatorcom.de/"
self.accept_next_alert = True
def test_sel(self):
driver = self.driver
delay = 3
driver.get(self.base_url + "de/7132/Seoul/d973-allthingstodo")
for i in range(1,1):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
html_source = driver.page_source
data = html_source.encode("utf-8")
Мой следующий шаг должен был ползти конкретную информацию с веб-сайта, как цена.
Таким образом, я добавил следующий код:
all_spans = driver.find_elements_by_xpath("/html/body/div[5]/div/div[3]/div[2]/div[2]/div[1]/div[1]/div")
print(all_spans)
for price in all_spans:
Header = driver.find_elements_by_xpath("/html/body/div[5]/div/div[3]/div[2]/div[2]/div[1]/div[1]/div/div[2]/div[2]/span[2]")
for span in Header:
print(span.text)
Но я получаю только одну цену, а не все из них. Не могли бы вы дать мне отзыв о том, что я мог бы улучшить свой код? Спасибо :)
EDIT
Благодаря вашим парням мне удалось получить это работает. Вот дополнительный код:
elements = driver.find_elements_by_xpath("//div[@id='productList']/div/div")
innerElements = 15
outerElements = len(elements)/innerElements
print(innerElements, "\t", outerElements, "\t", len(elements))
for j in range(1, int(outerElements)):
for i in range(1, int(innerElements)):
headline = driver.find_element_by_xpath("//div[@id='productList']/div["+str(j)+"]/div["+str(i)+"]/div/div[2]/h2/a").text
price = driver.find_element_by_xpath("//div[@id='productList']/div["+str(j)+"]/div["+str(i)+"]/div/div[2]/div[2]/span[2]").text
deeplink = driver.find_element_by_xpath("//div[@id='productList']/div["+str(j)+"]/div["+str(i)+"]/div/div[2]/h2/a").get_attribute("href")
print("Header: " + headline + " | " + "Price: " + price + " | " + "Deeplink: " + deeplink)
Теперь мой последний вопрос в том, что я до сих пор не получить последние 20 цен назад, которые имеет описание на английском языке. Я только возвращаю цены, которые имеют немецкое описание. Для английских они не получаются, хотя они имеют одну и ту же структуру html.
E.g. html для английских предметов
headline = driver.find_element_by_xpath("//div[@id='productList']/div[6]/div[1]/div/div[2]/h2/a")
Вы знаете, что мне нужно изменить? Любая обратная связь приветствуются :)
XPath у вас есть только один элемент ориентации - что XPath был скопирован/генерируется автоматически, поэтому Я бы предложил взглянуть на спецификации и руководства XPath, чтобы вы могли это понять. – Arran