对拉勾网招聘信息做一次数据分析(上)--40行代码拿下所有数据

原创
2017/04/24 00:01
阅读数 3.7K

环境:

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 LagouItem
from scrapy import log
class 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

展开阅读全文
打赏
6
58 收藏
分享
加载中
南寻博主

引用来自“kubei”的评论

蟒蛇的威力 在爬虫 上

喜欢点个赞刷个star,这俩天写个抓知乎的
2017/04/28 10:36
回复
举报
蟒蛇的威力 在爬虫 上
2017/04/28 10:32
回复
举报
更多评论
打赏
2 评论
58 收藏
6
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部