如何根据产品选择(例如尺寸、颜色、包装)获取信息?

2024-04-18 01:06:43 发布

您现在位置:Python中文网/ 问答频道 /正文

上周我成功地爬了1600多页。但被告知返回的数据中有很大一部分不正确(即价格),我的意思是,如果被爬网的项目可以选择(尺寸、颜色、数量/包)以查看价格,我如何才能收集每个选择的正确价格?似乎我的逻辑是在拉它发现的第一个价格。你知道吗

我在早期尝试只解析页面代码中的每一个组合,但总是无法准确返回,我转向只获取一个价格,但似乎我使用的大多数测试页面都不是特定于选项的定价,所以我忽略了一个很大一部分的网址,它们在布局和功能上并不相似。目前唯一有效的是我的代码,可以在这里找到。。你知道吗

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美元

由于我们会不时需要拉一个特定的英镑和长度,我需要关注什么,以便系统地拉正确的价格为所需的选择?你知道吗

有没有一种方法可以把每页的所有组合都拉出来,这样我们就不会一次又一次地碰到同一页了?你知道吗

我看过这里的一些链接和其他网站,似乎处理这一点,但很少丢失,如果他们甚至是相同的事情,我试图完成。你知道吗

只是想从哪里开始或者尝试什么。。你知道吗


Tags: 项目代码httpscomcode价格页面files
1条回答
网友
1楼 · 发布于 2024-04-18 01:06:43

在使用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将特定值传递到框中,从而获得您想要的确切价格。不过,上面的脚本并非包罗万象,但它应该是一个很好的起点。你知道吗

相关问题 更多 >

    热门问题