如何根据产品选择(例如尺寸、颜色、包装)抓取信息?
How to scrape information based on product selection(ex. Size, Color, Pack)?
上周我成功抓取了 1600 多个页面。但是被告知很大一部分数据 returned 关于被拉取的内容是不正确的。(即价格)我的意思是如果被抓取的项目可以选择(大小,颜色,qty/pack) 为了查看价格,我如何才能收集到每次选择的正确价格?看来我的逻辑是拉它找到的第一个价格。
我在早期尝试只解析页面代码中可用的每个组合,但总是无法准确地 return,我转向只提取 1 个价格,但似乎大部分我使用的测试页不是特定于选项的定价,所以我忽略了 URL 中布局和功能不相似的很大一部分。目前唯一有效的是我拥有的代码,可以在这里找到。
这对我们抓取的没有任何选择的任何项目页面来说效果很好,正如预期的那样。
完整的代码已经发布在这里,最终版本是有效的。
我不需要完整的示例,我只需要一些关于在代码中关注什么的指导,以便自动进行产品选择以获得正确的价格,选择组合
这是一个没有显示正确价格的示例页面:
https://www.dickssportinggoods.com/p/berkley-vanish-fluorocarbon-fishing-line-15bkyuvnsh25010clfli/15bkyuvnsh25010clfli
价格会在您开始选择时发生变化,如果您选择“6”磅和“2000 码”,价格将变为 75.99 美元,如果您将其更改为“250 码”,则价格将变为 12.99 美元
由于我们会不时地需要拉出特定的磅数和长度,我需要关注什么才能系统地拉出所需选择的正确价格?
有没有办法只提取每页的所有组合,这样我们就不会一遍又一遍地访问同一个页面?
我查看了此处的一些链接和其他似乎处理此问题的网站,但即使它们与我正在尝试完成的事情相同,我也不会迷失方向。
只是在寻找一些关于从哪里开始或尝试什么的指导..
在使用 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 将特定值传递到框中,从而获得您想要的确切价格。然而,上面的脚本并不是包罗万象的,但它应该是一个很好的起点。
上周我成功抓取了 1600 多个页面。但是被告知很大一部分数据 returned 关于被拉取的内容是不正确的。(即价格)我的意思是如果被抓取的项目可以选择(大小,颜色,qty/pack) 为了查看价格,我如何才能收集到每次选择的正确价格?看来我的逻辑是拉它找到的第一个价格。
我在早期尝试只解析页面代码中可用的每个组合,但总是无法准确地 return,我转向只提取 1 个价格,但似乎大部分我使用的测试页不是特定于选项的定价,所以我忽略了 URL 中布局和功能不相似的很大一部分。目前唯一有效的是我拥有的代码,可以在这里找到。
这对我们抓取的没有任何选择的任何项目页面来说效果很好,正如预期的那样。
完整的代码已经发布在这里,最终版本是有效的。
我不需要完整的示例,我只需要一些关于在代码中关注什么的指导,以便自动进行产品选择以获得正确的价格,选择组合
这是一个没有显示正确价格的示例页面: https://www.dickssportinggoods.com/p/berkley-vanish-fluorocarbon-fishing-line-15bkyuvnsh25010clfli/15bkyuvnsh25010clfli
价格会在您开始选择时发生变化,如果您选择“6”磅和“2000 码”,价格将变为 75.99 美元,如果您将其更改为“250 码”,则价格将变为 12.99 美元
由于我们会不时地需要拉出特定的磅数和长度,我需要关注什么才能系统地拉出所需选择的正确价格?
有没有办法只提取每页的所有组合,这样我们就不会一遍又一遍地访问同一个页面?
我查看了此处的一些链接和其他似乎处理此问题的网站,但即使它们与我正在尝试完成的事情相同,我也不会迷失方向。
只是在寻找一些关于从哪里开始或尝试什么的指导..
在使用 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 将特定值传递到框中,从而获得您想要的确切价格。然而,上面的脚本并不是包罗万象的,但它应该是一个很好的起点。