1.  在虚拟机中cd到项目目录,再运行下面代码创建spider文件:

  scrapy genspider -t crawl test www.baidu.com

   

2.  spider.py代码

  

  1. import scrapy
  2. from scrapy.linkextractors import LinkExtractor
  3. from scrapy.spiders import CrawlSpider, Rule
  4. from tanzhou.items import TanzhouItem,DetailItem
  5.  
  6. class TencentSpider(CrawlSpider):
  7. name = 'tencent'
  8. allowed_domains = ['hr.tencent.com']
  9. start_urls = ['https://hr.tencent.com/position.php?lid=2268&tid=87&keywords=python']
  10.  
  11. rules = (
  12. Rule(LinkExtractor(allow=r'start=\d+'), callback='parse_item',follow=True),
  13. Rule(LinkExtractor(allow=r'position_detail\.php\?id=\d+'), callback='parse_detail_item', follow=False),
  14.  
  15. )
  16.  
  17. def parse_item(self, response):
  18. # 解析职位信息
  19. tr = response.xpath(
  20. '//table[@class="tablelist"]/tr[@class = "even"]|//table[@class="tablelist"]/tr[@class = "odd"]')
  21. if tr:
  22. for i in tr:
  23. # 第二种方式,用items.py约束
  24. item = TanzhouItem()
  25. item["jobName"] = i.xpath('./td[1]/a/text()').extract_first()
  26. item["jobType"] = i.xpath('./td[2]/text()').extract_first()
  27. item["Num"] = i.xpath('./td[3]/text()').extract_first()
  28. item["Place"] = i.xpath('./td[4]/text()').extract_first()
  29. item["Time"] = i.xpath('./td[5]/text()').extract_first()
  30.  
  31. yield item
  32. def parse_detail_item(self,response):
  33. item = DetailItem()
  34. item['detail_content'] = response.xpath("//ul[@class = 'squareli']/li/text()").extract()
  35. item['detail_content'] = '\n'.join(item['detail_content'])
  36. yield item

3.  items代码:

  

  1. import scrapy
  2.  
  3. class TanzhouItem(scrapy.Item):
  4. # define the fields for your item here like:
  5. # name = scrapy.Field()
  6. jobName = scrapy.Field()
  7. jobType = scrapy.Field()
  8. Num = scrapy.Field()
  9. Place = scrapy.Field()
  10. Time = scrapy.Field()
  11. class DetailItem(scrapy.Item):
  12. detail_content = scrapy.Field()

4.  pipelines代码:

  

  1. import json
  2. from tanzhou.items import TanzhouItem,DetailItem
  3.  
  4. class TanzhouPipeline(object):
  5. def process_item(self, item, spider):
  6. # 数据json化 ,如果是用items 则需要先转化成字典格式dict()再用json
  7. # item = json.dumps(item,ensure_ascii=False)
  8. if isinstance(item,TanzhouItem):
  9. item = json.dumps(dict(item),ensure_ascii=False)
  10. self.f.write(item)
  11. self.f.write('\n')
  12. if isinstance(item,DetailItem):
  13. item = json.dumps(dict(item), ensure_ascii=False)
  14. self.f2.write(item)
  15. self.f2.write('\n')
  16.  
  17. return item
  18. # 爬虫开启时运行
  19. def open_spider(self,spider):
  20. # 打开文件
  21. self.f = open('info2.json','w')
  22. self.f2 = open('detail2.json', 'w')
  23. # 爬虫关闭时运行
  24. def close_spider(self,spider):
  25. # 关闭文件
  26. self.f.close()
  27. self.f2.close()

scrapy之Crawspider 腾讯招聘实战案例的更多相关文章

  1. Scrapy 项目:腾讯招聘

    目的: 通过爬取腾讯招聘网站(https://careers.tencent.com/search.html)练习Scrapy框架的使用 步骤: 1.通过抓包确认要抓取的内容是否在当前url地址中,测 ...

  2. python3 scrapy 爬取腾讯招聘

    安装scrapy不再赘述, 在控制台中输入scrapy startproject tencent 创建爬虫项目名字为 tencent 接着cd tencent 用pycharm打开tencent项目 ...

  3. 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息

    简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 系统环境:Fedora22(昨天已安装scrapy环境) 爬取的开始URL:ht ...

  4. Scrapy实现腾讯招聘网信息爬取【Python】

    一.腾讯招聘网 二.代码实现 1.spider爬虫 # -*- coding: utf-8 -*- import scrapy from Tencent.items import TencentIte ...

  5. pymongodb的使用和一个腾讯招聘爬取的案例

    一.在python3中操作mongodb 1.连接条件 安装好pymongo库 启动mongodb的服务端(如果是前台启动后就不关闭窗口,窗口关闭后服务端也会跟着关闭) 3.使用 import pym ...

  6. Scrapy项目 - 实现腾讯网站社会招聘信息爬取的爬虫设计

    通过使Scrapy框架,进行数据挖掘和对web站点页面提取结构化数据,掌握如何使用Twisted异步网络框架来处理网络通讯的问题,可以加快我们的下载速度,也可深入接触各种中间件接口,灵活的完成各种需求 ...

  7. Python爬虫框架Scrapy获得定向打击批量招聘信息

    爬虫,就是一个在网上到处或定向抓取数据的程序,当然,这样的说法不够专业,更专业的描写叙述就是.抓取特定站点网页的HTML数据.只是因为一个站点的网页非常多,而我们又不可能事先知道全部网页的URL地址, ...

  8. 【Vue.js实战案例】- Vue.js递归组件实现组织架构树和选人功能

    大家好!先上图看看本次案例的整体效果. 浪奔,浪流,万里涛涛江水永不休.如果在jq时代来实这个功能简直有些噩梦了,但是自从前端思想发展到现在的以MVVM为主流的大背景下,来实现一个这样繁杂的功能简直不 ...

  9. 3.awk数组详解及企业实战案例

    awk数组详解及企业实战案例 3.打印数组: [root@nfs-server test]# awk 'BEGIN{array[1]="zhurui";array[2]=" ...

随机推荐

  1. python多线程中锁的概念

    1 2 3 4 5 6 7 8 mutex = threading.Lock() #锁的使用 #创建锁 mutex = threading.Lock() #锁定 mutex.acquire([time ...

  2. RCNN--目标检测

    原博文:http://www.cnblogs.com/soulmate1023/p/5530600.html 文章简要介绍RCNN的框架,主要包含: 原图-->候选区域生成-->对每个候选 ...

  3. 在DOS中操作MySQL数据库出现中文乱码

    1. 问题:最近使用到MySQL数据库操作,在DOS下使用命令行向mysql中插入/读取中文时出现乱码问题. 2. 原因:由于CMD客户端默认编码为GBK,而本人在安装MySQL时设置编码为UTF-8 ...

  4. java怎样将一组对象传入Oracle存储过程

    注:本文来源 <  java怎样将一组对象传入Oracle存储过程  > java怎样将一组对象传入Oracle存储过程 java怎样将一组对象传入Oracle存储过程.须要注意的是jar ...

  5. Vux使用经验

    Vux使用心得 参考链接 布局 简单平分:水平布局和垂直布局 <template> <divider>Horizontal</divider> <flexbo ...

  6. nginx实践(二)之静态资源web服务(浏览器缓存场景)

    配置语法-expires

  7. SpringBoot全局日志管理(AOP)

    1.在pom.xml中引入aop的jar包 <dependency> <groupId>org.springframework.boot</groupId> < ...

  8. vue-cli脚手架(框架)

    一.创建vue项目 npm install vue-cli -g #-g全局 (sudo)npm install vue-cli -g #mac笔记本 vue-init webpack myvue # ...

  9. MYSQL之 error while loading shared libraries: libtinfo.so.5: cannot open shared objectfile: No such f

    环境:ubuntu18 登陆MYSQL时遇到错误:mysql: error while loading shared libraries: libtinfo.so.5: cannot open sha ...

  10. php实现备份数据库

    public function dataBackup(){ $doc_root=$_SERVER['DOCUMENT_ROOT']; $file_path_name=$doc_root.'/sqlba ...