博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对拉勾网招聘信息做一次数据分析(上)--40行代码拿下所有数据
阅读量:6418 次
发布时间:2019-06-23

本文共 3976 字,大约阅读时间需要 13 分钟。

hot3.png

环境:

ubuntu : 16.04

python : 3.5.2

scrapy : 1.3.3

编辑器 : vim

分析拉勾网(http://www.lagou.com)

可以看到在左侧有着各行各业的招聘信息,今天就把各行各业的招聘都给拿下来×——×

创建一个scrapy爬虫项目:

scrapy startproject lagou

使用基本(basic)模板创建一个蜘蛛(spider):

scrapy genspider lagou1 www.lagou.com

整个项目目录结构如下:

配置settings.py文件:

设置请求头(可以根据自己需要设置):

DEFAULT_REQUEST_HEADERS = {                                                                                                                'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',                                                 'Accept-Encoding':'gzip, deflate, sdch, br',                                                                                            'Accept-Language':'zh-CN,zh;q=0.8',                                                                                                    'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36',            }

配置ITEM_PIPELINES优先级:

ITEM_PIPELINES = {                                                                                                                         'lagou.pipelines.LagouPipeline': 300,                                                                                               }

'''爬太快对人家网站不太好'''',所以设置我设置0.5一次:

DOWNLOAD_DELAY = 0.5

最后配置图如下

编写items.py文件(item文件定义抓取数据格式):

因为这里只需要职位的序号,薪水,公司名称,职位名称,公司位置。所以items编写如下

import scrapy                                                                                                                          from scrapy import Field class LagouItem(scrapy.Item):                                                                                                               # define the fields for your item here like:                                                                                            # name = scrapy.Field()                                                                                                                 index=Field()     salary=Field()     company=Field()     positionname=Field()     position=Field()

用firefox里面的Firebug工具分析主页(http://www.lagou.com)左侧的的方向网址:编写代码获取各个方向的网址

因为存在一些url是"javascript:;"

所以用下面的if进行判断:

if 'http' in u:

获取各方向网址:

def home_parse(self,response):   sel=scrapy.selector.Selector(response)  #/html/body/div[2]/div[1]/div[1]/div[1]/div[1]   dd=sel.xpath("//div[@class='menu_main job_hopping']")   allurl=dd.xpath("//a/@href").extract()   for u in allurl:   if 'http' in u:   yield scrapy.Request(u,callback=self.parse,dont_filter=True)

对每一个方向的页面进行抓取:

例如:

针对这种页面编写代码如下:

def parse(self,response):   sel=selector.Selector(response)   dd=sel.xpath('//li[@class="con_list_item default_list"]')   for d in dd:   position=LagouItem()   position['index']=d.xpath('@data-index').extract()   position['salary']=d.xpath('@data-salary').extract()   position['company']=d.xpath('@data-company').extract()   position['position']=d.xpath('div[@class="list_item_top"]/div/div/a/span/em/text()').extract()   position['positionname']=d.xpath('@data-positionname').extract()   yield position   if 'http' in purl:   yield scrapy.Request(purl,callback=self.parse,dont_filter=True)

将存储数据到文件中(pipelines.py是存储数据的一个模块,你可以设置将数据存储到数据库,也可以存储到文件中):

from lagou.items import LagouItemfrom scrapy import logclass LagouPipeline(object):    def process_item(self, item, spider):     w=open('position','a')                                                                                    w.write(str(dict(item))+"\n")                                                                             w.close()                                                                                                 log.msg("position added to file!!!",level=log.DEBUG,spider=spider)                                        return item

 

至此爬虫代码完成

进入项目根目录执行下面命令,查看爬虫是否有无语法错误:scrapy list

接着运行爬虫:

scrapy crawl lagou1

结果:

这里我抓了大概三万条信息,明天再做分析×××——×××

欢迎大牛前来指教。。。

项目地址:https://git.oschina.net/nanxun/lagou.git

转载于:https://my.oschina.net/u/3264690/blog/885689

你可能感兴趣的文章
揪出MySQL磁盘消耗迅猛的真凶
查看>>
和“C”的再遇
查看>>
一键安装kubernetes 1.13.0 集群
查看>>
RabbitMq的集群搭建
查看>>
spring boot + mybatis 同时访问多数据源
查看>>
URL中汉字转码
查看>>
[转]go正则实例
查看>>
Selector中关于顺序的注意事项
查看>>
小黑小波比.清空<div>标签内容
查看>>
Java中的ExceptionInInitializerError异常及解决方法
查看>>
Spring 注入bean时的初始化和销毁操作
查看>>
java线程同步原理(lock,synchronized)
查看>>
MyEclipse中使用Hql编辑器找不到Hibernate.cfg.xml文件解决方法
查看>>
yRadio以及其它
查看>>
第四节 对象和类
查看>>
闪迪(SanDisk)U盘防伪查询(官方网站)
查看>>
Android onMeasure方法介绍
查看>>
无锁数据结构
查看>>
MySQL的变量查看和设置
查看>>
android onNewIntent
查看>>