Scrapy爬虫的基本流程

首先要知道爬取的网站是否需要登陆(如知乎, 只有登陆才能访问某些数据), 是否需要headers等.

之后就是根据自己的需要爬取自己需要解析的网页

start_request_url是第一个函数, 如果不重载, 默认迭代调用start_urls中的所有链接, 然后交给parse(默认)函数处理, 

也可以自己指明callback是哪个函数, 之后就是提取自己想要的信息. 

 

提取出信息之后,保存在字典中, 然后交给items和pipeline做进一步的处理(数据清理和保存在数据库中等等)

如果使用保存数据, 那么spider中就会很混乱, 毕竟spider只是获取数据, 其他事情交给items和pipeline更好

所以可以使用Scrapy提供的ItemLoader, 将获取的数据交给items, items中的数据都是列表类型, 一定要处理之后才能保存在数据库中

 

ItemLoader使用很简单, 在spider中定义一个item_loader = ItemLoader(item=TTItem(), response=response)

TTItem就是自己在items文件中自己定义的用于处理数据的类

因为ItemLoader返回的是列表类型, 所以可以在items文件中定义自己的ItemLoader, 也就是继承Itemloader

然后将default_outputprocessor = TakeFirst(), 也就将所有的列表中的第一个值作为相对应的值, 不用一步步的处理列表

 

然后就是保存在数据库中, 

当存在多个Item, 保存在不同的表中时, 可以通过函数的形式来统一管理(和动态绑定很想)

因为items中的所有Item处理完成之后都会交给pipeline进行处理,

所以可以在item中定义好插入语句和相关的参数, 然后通过函数的形式将数据传递给pipeline

其中每个item中都定义一个相同的函数(get_insert_sql, 自己随意命名) 然后将插入语句和参数一起交给pipeline

这样只需要处理item, pipeline就不用管理, 极大的提高了效率

posted on 2017-11-28 19:49  banji  阅读(165)  评论(0编辑  收藏  举报

导航