我正在尝试使用scrapy删除一些论坛,并将数据存储在数据库中。但是我不知道在更新数据库时要有效地做到这一点。这是我的蜘蛛的样子:
class ForumSpider(CrawlSpider):
name = "forum"
allowed_domains= ["forums.example.com"]
start_urls = ["forums.example.com/index.php"]
rules = (
Rule(SgmlLinkExtractor(allow=(r'/forum?id=\d+',)),
follow=True, callback='parse_index'),
)
def parse_index(self, response):
hxs = HtmlXPathSelector(response)
#parsing....looking for threads.....
#pass the data to pipeline and store in to the db....
我的问题是,当我一周后再次废弃同一论坛时,说没有意义遍历所有页面,因为新主题或任何带有新帖子的主题都将位于其他非活动主题之上。我的想法是检查论坛的第一页(forums.example.com/forum?id=1),如果它在第一页上找到了具有相同URL和相同回复数的主题。没有必要转到第二页。因此,蜘蛛应进入另一个论坛(forums.example.com/forum?id=2)。我尝试修改start_urls和规则,但似乎一旦蜘蛛运行它们就没有响应。有办法做到这一点吗?
我的第二个问题是如何对不同的蜘蛛使用不同的管道。我在堆栈溢出中发现了一些东西。但这似乎并不是建立于scrapy的基础上,您似乎想为不同的站点创建一个新项目。
我使用了错误的工具吗?或我缺少了一些东西。我考虑过使用机械化和lxml来做到这一点。但是我需要实现扭曲和unicode处理等等,这使我想坚持抓
谢谢
最佳答案
您要的是动态创建http请求。
在parse_index函数内部执行此操作。request = self.make_requests_from_url(http://forums.example.com/forum?id=2)
return request
如果要提交多个http请求,请返回一个数组。
看到这个Request in scrapy
您对第二件事是正确的,如果您想从不同的网站提取不同类型的数据,则假设编写了不同的蜘蛛。
关于python - 刮刮刮论坛,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12808877/