我认为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/
。显然,明智的做法是将comment
或user
信息与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/