scrapy之Crawspider 腾讯招聘实战案例
1. 在虚拟机中cd到项目目录,再运行下面代码创建spider文件:
scrapy genspider -t crawl test www.baidu.com
2. spider.py代码
- import scrapy
- from scrapy.linkextractors import LinkExtractor
- from scrapy.spiders import CrawlSpider, Rule
- from tanzhou.items import TanzhouItem,DetailItem
- class TencentSpider(CrawlSpider):
- name = 'tencent'
- allowed_domains = ['hr.tencent.com']
- start_urls = ['https://hr.tencent.com/position.php?lid=2268&tid=87&keywords=python']
- rules = (
- Rule(LinkExtractor(allow=r'start=\d+'), callback='parse_item',follow=True),
- Rule(LinkExtractor(allow=r'position_detail\.php\?id=\d+'), callback='parse_detail_item', follow=False),
- )
- def parse_item(self, response):
- # 解析职位信息
- tr = response.xpath(
- '//table[@class="tablelist"]/tr[@class = "even"]|//table[@class="tablelist"]/tr[@class = "odd"]')
- if tr:
- for i in tr:
- # 第二种方式,用items.py约束
- item = TanzhouItem()
- item["jobName"] = i.xpath('./td[1]/a/text()').extract_first()
- item["jobType"] = i.xpath('./td[2]/text()').extract_first()
- item["Num"] = i.xpath('./td[3]/text()').extract_first()
- item["Place"] = i.xpath('./td[4]/text()').extract_first()
- item["Time"] = i.xpath('./td[5]/text()').extract_first()
- yield item
- def parse_detail_item(self,response):
- item = DetailItem()
- item['detail_content'] = response.xpath("//ul[@class = 'squareli']/li/text()").extract()
- item['detail_content'] = '\n'.join(item['detail_content'])
- yield item
3. items代码:
- import scrapy
- class TanzhouItem(scrapy.Item):
- # define the fields for your item here like:
- # name = scrapy.Field()
- jobName = scrapy.Field()
- jobType = scrapy.Field()
- Num = scrapy.Field()
- Place = scrapy.Field()
- Time = scrapy.Field()
- class DetailItem(scrapy.Item):
- detail_content = scrapy.Field()
4. pipelines代码:
- import json
- from tanzhou.items import TanzhouItem,DetailItem
- class TanzhouPipeline(object):
- def process_item(self, item, spider):
- # 数据json化 ,如果是用items 则需要先转化成字典格式dict()再用json
- # item = json.dumps(item,ensure_ascii=False)
- if isinstance(item,TanzhouItem):
- item = json.dumps(dict(item),ensure_ascii=False)
- self.f.write(item)
- self.f.write('\n')
- if isinstance(item,DetailItem):
- item = json.dumps(dict(item), ensure_ascii=False)
- self.f2.write(item)
- self.f2.write('\n')
- return item
- # 爬虫开启时运行
- def open_spider(self,spider):
- # 打开文件
- self.f = open('info2.json','w')
- self.f2 = open('detail2.json', 'w')
- # 爬虫关闭时运行
- def close_spider(self,spider):
- # 关闭文件
- self.f.close()
- self.f2.close()
scrapy之Crawspider 腾讯招聘实战案例的更多相关文章
- Scrapy 项目:腾讯招聘
目的: 通过爬取腾讯招聘网站(https://careers.tencent.com/search.html)练习Scrapy框架的使用 步骤: 1.通过抓包确认要抓取的内容是否在当前url地址中,测 ...
- python3 scrapy 爬取腾讯招聘
安装scrapy不再赘述, 在控制台中输入scrapy startproject tencent 创建爬虫项目名字为 tencent 接着cd tencent 用pycharm打开tencent项目 ...
- 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息
简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 系统环境:Fedora22(昨天已安装scrapy环境) 爬取的开始URL:ht ...
- Scrapy实现腾讯招聘网信息爬取【Python】
一.腾讯招聘网 二.代码实现 1.spider爬虫 # -*- coding: utf-8 -*- import scrapy from Tencent.items import TencentIte ...
- pymongodb的使用和一个腾讯招聘爬取的案例
一.在python3中操作mongodb 1.连接条件 安装好pymongo库 启动mongodb的服务端(如果是前台启动后就不关闭窗口,窗口关闭后服务端也会跟着关闭) 3.使用 import pym ...
- Scrapy项目 - 实现腾讯网站社会招聘信息爬取的爬虫设计
通过使Scrapy框架,进行数据挖掘和对web站点页面提取结构化数据,掌握如何使用Twisted异步网络框架来处理网络通讯的问题,可以加快我们的下载速度,也可深入接触各种中间件接口,灵活的完成各种需求 ...
- Python爬虫框架Scrapy获得定向打击批量招聘信息
爬虫,就是一个在网上到处或定向抓取数据的程序,当然,这样的说法不够专业,更专业的描写叙述就是.抓取特定站点网页的HTML数据.只是因为一个站点的网页非常多,而我们又不可能事先知道全部网页的URL地址, ...
- 【Vue.js实战案例】- Vue.js递归组件实现组织架构树和选人功能
大家好!先上图看看本次案例的整体效果. 浪奔,浪流,万里涛涛江水永不休.如果在jq时代来实这个功能简直有些噩梦了,但是自从前端思想发展到现在的以MVVM为主流的大背景下,来实现一个这样繁杂的功能简直不 ...
- 3.awk数组详解及企业实战案例
awk数组详解及企业实战案例 3.打印数组: [root@nfs-server test]# awk 'BEGIN{array[1]="zhurui";array[2]=" ...
随机推荐
- python多线程中锁的概念
1 2 3 4 5 6 7 8 mutex = threading.Lock() #锁的使用 #创建锁 mutex = threading.Lock() #锁定 mutex.acquire([time ...
- RCNN--目标检测
原博文:http://www.cnblogs.com/soulmate1023/p/5530600.html 文章简要介绍RCNN的框架,主要包含: 原图-->候选区域生成-->对每个候选 ...
- 在DOS中操作MySQL数据库出现中文乱码
1. 问题:最近使用到MySQL数据库操作,在DOS下使用命令行向mysql中插入/读取中文时出现乱码问题. 2. 原因:由于CMD客户端默认编码为GBK,而本人在安装MySQL时设置编码为UTF-8 ...
- java怎样将一组对象传入Oracle存储过程
注:本文来源 < java怎样将一组对象传入Oracle存储过程 > java怎样将一组对象传入Oracle存储过程 java怎样将一组对象传入Oracle存储过程.须要注意的是jar ...
- Vux使用经验
Vux使用心得 参考链接 布局 简单平分:水平布局和垂直布局 <template> <divider>Horizontal</divider> <flexbo ...
- nginx实践(二)之静态资源web服务(浏览器缓存场景)
配置语法-expires
- SpringBoot全局日志管理(AOP)
1.在pom.xml中引入aop的jar包 <dependency> <groupId>org.springframework.boot</groupId> < ...
- vue-cli脚手架(框架)
一.创建vue项目 npm install vue-cli -g #-g全局 (sudo)npm install vue-cli -g #mac笔记本 vue-init webpack myvue # ...
- 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 ...
- php实现备份数据库
public function dataBackup(){ $doc_root=$_SERVER['DOCUMENT_ROOT']; $file_path_name=$doc_root.'/sqlba ...