【问题标题】:Web Scraping for optimal price?网络抓取以获得最优价格?
【发布时间】:2017-12-04 13:59:30
【问题描述】:

本网站比较了我国大部分商店中某款《万智牌:万智牌》的所有价格https://www.ligamagic.com.br/?view=cards%2Fsearch&card=

我想编写一个程序:

1 -> 向我索要卡片清单(含金额)

2 -> 我插入我想买的卡片

3 -> 程序显示购买这些卡的最佳方式。

任何商店的运费通常为 7 美元。

程序必须告诉我购买我插入的所有卡的最佳方式是什么(最便宜的方式)。它必须根据运费显示多个商店,如果这种方式更便宜的话。

我的问题是:我不确定从哪里开始。 对于这个非常具体的案例,我应该学习什么? Phyton 网页抓取? Excel 网页抓取?

我愿意学习代码语言、观看视频教程等。任何对我有帮助的东西。

【问题讨论】:

  • SO 不是代码编写服务。
  • 嗯,你可以从学习代码语言、看视频教程等开始。用 Python 是可以做到的,所以如果你不懂 Python,就学它,如果你学过爬虫。如果您知道要查找什么,我看不出问题。
  • 您是否要求我们为您的项目编写代码?从一些事情开始,如果您在编码时遇到一些问题,请在此处寻求帮助。
  • 旁注:我们也不推荐特定的教程或其他非现场资源。请参阅here,了解有关 Stack Overflow 主题问题的更多信息。
  • 我展示了一个我想解决的具体问题,我想问从哪里开始。

标签: python excel web-scraping


【解决方案1】:

您将在这里遇到的问题是,您的程序将搜索卡片的每个站点都需要唯一的代码。每个站点的 html 的组织方式都不同,您必须剖析此 html 以确定每个站点的卡片数据是如何表示的。如果您愿意为每个站点的 html 编写唯一的代码来搜索特定的卡片数据,那么我建议如下:

  • 使用上面建议的 Selenium webdriver(相当容易学习)和 phantomjs(它是无头的,所以它更快)。

    1. 对于每个可能包含卡片的潜在站点,编写一个函数,将 phantom js 驱动程序定向到该站点 url,然后使用 FindElement 查找搜索栏元素。然后使用 SendKeys 方法将单个卡片的名称发送到搜索栏,然后使用搜索按钮上的 Click 方法。
    2. 然后驱动程序将被定向到包含搜索结果的页面。在这里,您必须使用诸如 chrome 开发人员工具之类的工具来检查页面的 html 并确定卡片数据(名称、价格等)的呈现方式。剖析 html 后,您可以让程序使用 FindElement 来获取此数据。将其存储在某种集合中以返回您的主函数。
    3. 重复这些步骤,为您计划搜索的每个网站编写一个独特的抓取功能。
    4. 从您的主函数中,调用上述每个抓取函数,并比较每个函数的结果以找到最优价格。

这是一个非常高级的解释,但是如果您了解诸如 python 或 c# 之类的语言的基础知识,那么自学 selenium 和 phantomjs 将很容易,而且这将相当容易实现。

【讨论】:

  • ligamagic.com.br/?view=cards%2Fsearch&card= 对于您请求的任何卡都有相同的列表模式
  • 是的,该网站上每张卡片的列表模式都是相同的。与每个网站的情况一样(所有卡片都将在该网站中以相同的方式列出)。但他计划搜索多个站点。每个站点的列表模式都是独一无二的。因此,他需要为他计划搜索的每个网站使用单独的抓取功能。
  • 无需搜索每个商店。我们只需要收集 Ligamagic 的信息。如:[店铺名称+卡名+价格]。
【解决方案2】:

您可以使用 Selenium 驱动程序从您选择的编码语言驱动浏览器。这需要一些设置,但并不难。

我认为您会在这里发现问题是双重的。首先,您需要了解在哪里查看(即哪些网站正在销售),然后提出一些启发式方法来定义您如何确定在哪里查看,以便您的程序能够在网络动态变化时发现新的购买来源(即网站下线,商店关闭,新开张,库存用完)。其次,您需要弄清楚如何使程序考虑运输成本、税收等因素(此信息不会以相同的格式或从程序将要抓取的每个站点的相同位置获得)。

我希望这有帮助吗?

【讨论】:

    猜你喜欢
    • 2016-02-06
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2020-06-20
    相关资源
    最近更新 更多