写在前面:开始数据挖掘的学习已有一段时间,由于研究生阶段一直使用C++,代码的熟练度还远远不够,对算法的理解也不够深刻。因此,想要写点东西记录自己学习的过程,希望可以在积累中不断提升自己。
今天写一写最近几天爬取分析拉勾网岗位数据的过程,用到了python数据整理常用的pandas库、可视化操作的matplotlib和seaborn库、爬虫算法常用框架scrapy。
建立爬虫框架
学习scrapy时主要参考了这篇博文:【图文详解】scrapy爬虫与Ajax动态页面——爬取拉勾网职位信息(1)
观察拉勾网网页及源代码发现,结构为主页——职位分类——职位列表——具体职位信息,我们尝试爬取“数据挖掘”分类下的所有职位信息,首先建立爬虫框架:
spiders文件
观察网页地址发现,数据挖掘分类下第一页职位列表的地址为http://www.lagou.com/zhaopin/shujuwajue/1/?labelWords=label,后面的网页只修改了地址中的数字(即页码),其他不变。
class LgjobsSpider(scrapy.Spider):
name = "lgjobs"
start_urls = (
'http://www.lagou.com/zhaopin/shujuwajue/1/?labelWords=label',# 'http://www.lagou.com/',
)
totalpageCount=1
def start_requests(self):
return [scrapy.http.FormRequest('http://www.lagou.com/zhaopin/shujuwajue/1/?labelWords=label', callback=self.parse)]
观察职位列表页的源代码和职位详情页的源代码发现,二级网页的源代码更容易提取,包含的信息也更全面,因此选择首先在网页内爬取二级网页的地址,再由二级网页爬取所需的职位信息。
def parse(self, response):
selector = scrapy.Selector(response)
next_urls = selector.xpath('//a[@class="position_link"]').extract()
for each