Как собрать информацию на основе выбора продукта (например, размер, цвет, упаковка)? - PullRequest
1 голос
/ 09 мая 2019

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

В ранних попытках я пытался просто проанализировать каждую комбинацию, имеющуюся в коде страницы, но это всегда не давало точного результата, что я перешел на получение только одной цены, но кажется, что большинство тестовых страниц, которые я использовал, не были Цены на конкретные варианты, поэтому я упустил из виду большую часть URL, которые не были похожи по макету и функциональности. На данный момент единственное, что работает, это код, который у меня есть, который можно найти здесь ..

https://stackoverflow.com/questions/55925202/why-does-this-code-generate-multiple-files-i-want-1-file-with-all-entries-in-it/55925220#55925220

Это прекрасно работает и, как и ожидалось, для любой страницы элемента, которую мы сканируем, не имеет выбора, которую нужно сделать ..

https://stackoverflow.com/questions/55925202/why-does-this-code-generate-multiple-files-i-want-1-file-with-all-entries-in-it/55925220#55925220

Весь код уже размещен здесь с окончательной версией, которая работает.

Мне не нужны полные примеры, мне просто нужно некоторое руководство о том, на чем сосредоточиться в коде, чтобы автоматически выбирать товары для получения правильной цены, комбинация выбора

Вот пример страницы, которая не вывела правильную цену: https://www.dickssportinggoods.com/p/berkley-vanish-fluorocarbon-fishing-line-15bkyuvnsh25010clfli/15bkyuvnsh25010clfli

Цена изменяется, когда вы начинаете делать выбор, если вы выберете «6» фунтов стерлингов и «2000 ярдов», цена изменится на $ 75,99, затем, если вы измените ее на «250 ярдов», тогда цена изменится на $ 12,99 * 1016. *

Поскольку время от времени у нас будет необходимость вытягивать определенный фунт и длину, на чем мне нужно сосредоточиться, чтобы систематически получать правильную цену для необходимого выбора?

Есть ли способ просто вытянуть ВСЕ комбинации на страницу, пока мы не попадем на одну и ту же страницу снова и снова?

Я просмотрел некоторые ссылки здесь и другие сайты, которые, кажется, имеют с этим дело, но мало что потеряли, если они даже то же самое, что я пытаюсь сделать.

Просто ищу несколько советов о том, с чего начать или что попробовать ..

1 Ответ

1 голос
/ 09 мая 2019

При использовании scrapy, если вам нужны все комбинации, вам нужно обязательно включить все условия в ваш сценарий, что, как вы знаете, совершенно неразумно.

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

import requests
import urllib3
import pandas as pd
import numpy as np
import os
import traceback
import io
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC


chrome_options = Options()
#chrome_options.add_argument('--headless')
#chrome_options.add_argument('--hide-scrollbars')
#chrome_options.add_argument('--disable-gpu')
#chrome_options.add_argument("--log-level=3")  # fatal

url = 'https://www.dickssportinggoods.com/p/berkley-vanish-fluorocarbon-fishing-line-15bkyuvnsh25010clfli/15bkyuvnsh25010clfli'

browser = webdriver.Chrome(
    executable_path=r'C:\Users\edekio\Documents\chromedriver.exe', chrome_options=chrome_options)
browser.get(url)

pounds = browser.find_element_by_link_text('14').click()

length = browser.find_element_by_link_text('250 yds').click()

price = WebDriverWait(browser, 60).until(
    EC.presence_of_element_located((By.ID, "ProductInfoPrice_740978")))

price_text = price.get_attribute('value')
print(price_text)

Вывод:

14.99

Как вы можете видеть, мы можем передавать конкретные значенияв коробки, используя селен, таким образом, получая точную цену, которую вы хотите.Однако приведенный выше скрипт не является всеобъемлющим, но он должен стать хорошей отправной точкой.

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