Невозможно проанализировать элемент из eBay через BeautifulSoup - PullRequest
0 голосов
/ 09 ноября 2019

Я пытаюсь определить количество проданных товаров на eBay, но по какой-то причине не могу. У меня уже есть название, цена, и все, что мне нужно, это total_sold_price, которого я не могу получить. Каждый раз, когда я запускаю свой код, я просто получаю бланк для total_sold_price.

try:
    title_selenium = driver.find_element_by_xpath('//*[@id="itemTitle"]').text
except:
    title_selenium = ""
try:
    price_selenium = driver.find_element_by_xpath('//*[@id="prcIsum"]').text.strip().split()
except:
    price_selenium = ""
try:
    total_sold_price_BeautifulSoup = soup.find('span', {'class': 'vi-qtyS-hot-red'}).text
except:
    total_sold_price_BeautifulSoup = ""

Весь мой код: https://pastebin.com/bu8HgCDZ

Большое вам спасибо.

1 Ответ

1 голос
/ 09 ноября 2019

Исправлено для вас. Вам нужно сделать soup вызов внутри вашего цикла.

Примечание: я использую этот путь '../chromedriver', пожалуйста, измените его на свой путь перед запуском кода.

Код

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
from bs4 import BeautifulSoup

driver = webdriver.Chrome('../chromedriver')
driver.get('https://www.ebay.com/sch/i.html?_from=R40&_nkw=watches&_sacat=0&_pgn=1')
soup = BeautifulSoup(driver.page_source, 'lxml')
driver.maximize_window()

tempList = []

for link in soup.find_all('a', href=True):
    if 'itm' in link['href']:
        print(link['href'])
        tempList.append(link['href'])

array_length = len(tempList)

for i in range(array_length):
    driver.get(tempList[i])
    timeout = 5

    try:
        element_present = EC.presence_of_element_located((By.XPATH, '//*[@id="itemTitle"]'))
        WebDriverWait(driver, timeout).until(element_present)
    except TimeoutException:
        print("Timed out waiting for page to load")

    try:
        title_selenium = driver.find_element_by_xpath('//*[@id="itemTitle"]').text
    except:
        title_selenium = ""
    try:
        price_selenium = driver.find_element_by_xpath('//*[@id="prcIsum"]').text.strip().split()
    except:
        price_selenium = ""
   #you need to call soup here due to your loop structure
   soup = BeautifulSoup(driver.page_source, 'lxml')
   try:
        total_sold_price_BeautifulSoup = soup.find('span', {'class': 'vi-qtyS-hot-red'}).text
    except:
        total_sold_price_BeautifulSoup = ""

    print("title: ", title_selenium)
    print("price: ", price_selenium)
    print("total_sold_price: ", total_sold_price_BeautifulSoup)
    print("\n")

    i+=1




driver.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...