项目目标
爬取拉勾网职位列表基本信息+职位描述
项目思考
拉勾网的招聘岗位列表,这是Ajax异步加载的。
我想把岗位列表所显示的信息爬取下来,同时还需要岗位的工作详情。
爬取流程就是一开始就不断获取职位列表的json,然后从json中提取对应的职位详情页,再进去爬取其职位描述。
使用Scrapy的scrapy.Spider基础爬虫模板很简单就可以实现,直接重载编写parse方法,再加上个回调方法就可以。
但如何使用CrawlSpider做到类似的功能?
对于获取json的网址,rules规则没什么用,而CrawlSpider中的parse是不能被重载的。
-
第一步,重写start_request():
crawlspider继承基类是spider,所以它的开始入口也是start_request(),然后默认回调parse。注意回调parse这个不能改。
-
第二步,重写parse_start_url()
start_request()->parse()->_parse_response()->parse_start_url()
如果设置了callback就会调用parse_start_url()方法,rules中的回调。
因为rules在本次项目中没有作用,所以我们需要重载parse_start_url()作为我们的回调方法。
在parse_start_url()中,需要获取职位的详情页,发起request,设置回调方法。
不断发起下一页的职位列表请求。 -
第三步,编写解析职位描述的detail_parse()
注意的时,这里最后在parse_start_url()中使用response.meta传递item到detail_parse()来进行数据保存。
因为如果在parse_start_url()就把职位列表的信息保存下来的话,因为Scrapy程序调度的关系,在插入数据库的时候,item中的数据不一定同步,插入数据库会报一些错。
-
注意request要带上有cookie的header,不然会被重定向到login页面