【问题标题】:How to scrape information based on product selection(ex. Size, Color, Pack)?如何根据产品选择(例如尺寸、颜色、包装)抓取信息?
【发布时间】:2019-09-26 16:14:26
【问题描述】:

我上周成功抓取了 1600 多个页面。但是被告知返回的数据中有很大一部分是不正确的。(即价格)我的意思是,如果被抓取的项目可以选择按顺序进行选择(尺寸、颜色、数量/包装)要查看价格,我如何才能收集每个选择的正确价格?似乎我的逻辑是在拉它找到的第一个价格。

我在早期尝试只解析页面代码中可用的每个组合,但这总是无法准确返回,我开始只拉 1 个价格,但似乎我使用的大多数测试页面都没有选项特定的定价,所以我忽略了很大一部分在布局和功能上不相似的 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 美元

p>

由于我们不时需要调整特定的磅数和长度,我需要关注什么才能系统地为所需的选择拉出正确的价格?

有没有办法在每个页面中提取所有组合,这样我们就不会一遍又一遍地点击同一页面?

我查看了此处的一些链接和其他似乎可以处理此问题的网站,但如果它们甚至与我正在尝试完成的事情相同,也不会丢失。

只是寻找一些关于从哪里开始或尝试什么的指导..

【问题讨论】:

  • 我只能看到"We're sorry to say that due to the General Data Protection Regulation, visitors from your location are unable to browse our web store."

标签: python beautifulsoup scrapy selection


【解决方案1】:

在使用 scrapy 时,如果您想要所有组合,则需要确保在脚本中包含所有条件,您知道这是完全不合理的。

我会使用两种不同的解析器,scrapy 用于一般抓取,而 selenium 用于更具体的抓取。使用 selenium,您可以在脚本中输入特定组合并在页面上解析价格,如下所示:

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

如您所见,我们可以使用 selenium 将特定值传递到框中,从而获得您想要的确切价格。然而,上面的脚本并不是包罗万象的,但它应该是一个很好的起点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    相关资源
    最近更新 更多