python - scrapy针对不同类型的项目使用不同的蜘蛛

标签 python web web-crawler scrapy

我认为scrapy的框架可能有点不灵活。我找不到好的解决方案来解决我的问题。

这是我现在面临的问题。

有一个网站,比如说,http://example.com/。我想从中删除一些信息。

它有许多项目,其网址形式为http://example.com/item/([0-9]+),目前我有效([0-9]+)列表,大约有300万索引ID,完成整个网页抓取工作似乎是一个简单的任务.

但是,这个任务的结构是这样的:

  • /item/页面上有很多该商品的数据。我想要这些信息,这个很容易实现。
  • 有链接指向与该项目相关的实体,例如带有链接路径 /owner/项目所有者,或该项目所属的集合 和链接路径 /collection/ 等等。我想要这些实体的所有独特信息,这是很难实现的。它们不应该是 item 的嵌套项目或被单个蜘蛛废弃,原因如下:
    • 单个 所有者拥有[1-n] 件元素。
    • 单个项目有[1-n]所有者
    • 与带有项目的集合相同。
  • 有指向与该项目相关的其他实体的链接,例如链接路径为 /comment/comment 或喜欢的 user它具有链接路径 /user/。显然,明智的做法是将 commentuser 信息与 item 分开,并使用 key 或 index 来引用实体。这是单个蜘蛛很难实现的。

所以,我更喜欢启动一个蜘蛛来处理http://example.com/item/([0-9]+)列表,并使用其他类型的蜘蛛来处理分别与项目所有者集合评论用户

但是,问题是我没有项目所有者集合评论的列表和用户。我只能通过迭代 http://example.com/item/([0-9]+) 的网页来遍历所有这些实体。

我用谷歌搜索了很多,但没有找到适合我的问题的解决方案。请随意发表您的意见。

最佳答案

您的大部分要求似乎都非常适合 scrapy。您已经说过您可以简单地抓取项目列表,这是一个好的开始。我认为你是说每个项目都有所有者、评论、用户的链接。在本例中,您可以使用response.xpath 获取URL,然后以yield Request(URL,callback=parse_owner) 为例。您需要将不同的抓取数据链接在一起,在这种情况下,您可以将 meta={'id':identifier} 添加到 Request()。正如 @kotrfa 所说,转储到数据库可能是最好的,因为这听起来像是存在一些数据交叉链接。

鉴于您提供的信息,这就是我所能提供的信息。更多信息将使我们的情况更加清晰。

关于python - scrapy针对不同类型的项目使用不同的蜘蛛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34330372/

相关文章:

linux - sed 解码 html 编码。需要解释如何

jquery - 彼此相邻插入jquery?

java - 如何打开网络上的 txt 文件并将其内容读取为字符串?

machine-learning - 由神经网络训练的神经机器人可以用于以下目的吗?

python - 如何在 Pandas 中用分组模式替换缺失值?

Python:使用 shutil.move 或 os.rename 移动文件夹

python - 如何在 python 中使用 scrapy 获取直接父节点?

python - 循环中的 Scrapy 调用请求

python - 从 Python 测试 Apache 配置文件

python - 从 Python 写入机器人框架控制台