『Scrapy』爬取腾讯招聘网站
分析爬取对象
初始网址,
http://hr.tencent.com/position.php?@start=0&start=0#a
(可选)由于含有多页数据,我们可以查看一下这些网址有什么相关

page2:http://hr.tencent.com/position.php?@start=0&start=10#a
page3:http://hr.tencent.com/position.php?@start=0&start=20#a
也就是说末尾id每次递增10(#a无实际意义,输入start=0也能进入第一页)。
确定想爬取的信息:

我们爬取表格中的5类信息和每个招聘的具体网页地址,共6个条目,在查看源码的过程中我们可以使用F12开发者工具辅助定位,

其中class=event的tr表示白色背景条目,class=odd表示灰色背景条目,点击开查看具体信息如下,

爬虫编写
使用框架初始化项目,
scrapy startproject Tencent

修改items.py,对应上面需要记录的六组数据,
import scrapy class TencentItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
# 职位名
positionName = scrapy.Field()
# 职位详情链接
positionLink = scrapy.Field()
# 职位类别
positionType = scrapy.Field()
# 招聘人数
peopleNumber = scrapy.Field()
# 工作地点
workLocation = scrapy.Field()
# 发布时间
publishtime = scrapy.Field()
生成初始爬虫spider命名为tensent.py,
scrapy genspider tencent "tencent.com"
修改tencent.py,注意函数需要返回item
import scrapy
from Tencent.items import TencentItem class TencentSpider(scrapy.Spider):
name = "tencent"
allowed_domains = ["tencent.com"] baseURL = "http://hr.tencent.com/position.php?@start="
offset = 0
start_urls = [baseURL + str(offset)] def parse(self, response):
node_list = response.xpath("//tr[@class='even'] | //tr[@class='odd']") for node in node_list:
item = TencentItem() # 职位名
item['positionName'] = node.xpath("./td[1]/a/text()").extract()[0]
print(node.xpath("./td[1]/a/text()").extract()) # 职位详情链接
item['positionLink'] = node.xpath("./td[1]/a/@href").extract()[0] # 职位类别
if len(node.xpath("./td[2]/text()")):
item['positionType'] = node.xpath("./td[2]/text()").extract()[0]
else:
item['positionType'] = '' # 招聘人数
item['peopleNumber'] = node.xpath("./td[3]/text()").extract()[0] # 工作地点
item['workLocation'] = node.xpath("./td[4]/text()").extract()[0] # 发布时间
item['publishtime'] = node.xpath("./td[5]/text()").extract()[0] yield item # 换页方法一:直接构建url
if self.offset <2190:
self.offset += 10
url = self.baseURL + str(self.offset)
yield scrapy.Request(url, callback=self.parse) # callback函数可以更换,即可以使用不同的处理方法处理不同的页面
两个yield连用使得不同的调用次数函数输出不同的表达式,这是一个很好的技巧,不过第二个yield是可以替换为return的,毕竟提交一个新请求后引擎会自动调用parse去处理响应
这里面使用提取下一页的方法是自己拼接之后的网址,这是一种相对而言笨拙一点的手法,一般会直接在网页中提取下一页的网址,但是这对于一些无法提取下一页网址的情况很实用。
更新一下直接在网页提取下一页的方法,
# 换页方法二:提取下页链接
if not len(response.xpath("//a[@class='noactive' and @id='next']")):
url = 'http://hr.tencent.com/' + response.xpath("//a[@id='next']/@href").extract()[0]
yield scrapy.Request(url, callback=self.parse)
对于静态页面这很容易,但是如果是动态页面就可能需要其他的辅助手段了。另外settings中有有关请求头文件的设置部分,有需求的话可以改写之。
取消settings.py对于管线文件的注释,

修改pipelines.py文件,
import json class TencentPipeline(object):
def __init__(self):
self.f = open('tencent.json','w') def process_item(self, item, spider):
content = json.dumps(dict(item),ensure_ascii=False) + ',\n'
self.f.write(content)
return item def close_spider(self,spider):
self.f.close()
这样一个初级的爬虫项目就完成了。
测试并运行,
scrapy check tencent
scarpy srawl tencent
打开保存的json文件,可以看到类似下面的输出,每一行为一条招聘信息,
{"workLocation": "深圳", "positionType": "技术类", "positionName": "24111-安全架构师", "peopleNumber": "1", "publishtime": "2017-08-26", "positionLink": "position_detail.php?id=32378&keywords=&tid=0&lid=0"},
完成后整个文件夹变化如下,

实际爬取过程是要消耗一点时间的。
『Scrapy』爬取腾讯招聘网站的更多相关文章
- 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息
简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 系统环境:Fedora22(昨天已安装scrapy环境) 爬取的开始URL:ht ...
- 『Scrapy』爬取斗鱼主播头像
分析目标 爬取的是斗鱼主播头像,示范使用的URL似乎是个移动接口(下文有提到),理由是网页主页属于动态页面,爬取难度陡升,当然爬取斗鱼主播头像这么恶趣味的事也不是我的兴趣...... 目标URL如下, ...
- scrapy框架爬取智联招聘网站上深圳地区python岗位信息。
爬取字段,公司名称,职位名称,公司详情的链接,薪资待遇,要求的工作经验年限 1,items中定义爬取字段 import scrapy class ZhilianzhaopinItem(scrapy.I ...
- 使用Scrapy框架爬取腾讯新闻
昨晚没事写的爬取腾讯新闻代码,在此贴出,可以参考完善. # -*- coding: utf-8 -*- import json from scrapy import Spider from scrap ...
- python3 scrapy 爬取腾讯招聘
安装scrapy不再赘述, 在控制台中输入scrapy startproject tencent 创建爬虫项目名字为 tencent 接着cd tencent 用pycharm打开tencent项目 ...
- scrapy 第一个案例(爬取腾讯招聘职位信息)
import scrapy import json class TzcSpider(scrapy.Spider): # spider的名字,唯一 name = 'tzc' # 起始地址 start_u ...
- <scrapy爬虫>爬取腾讯社招信息
1.创建scrapy项目 dos窗口输入: scrapy startproject tencent cd tencent 2.编写item.py文件(相当于编写模板,需要爬取的数据在这里定义) # - ...
- Python 爬取腾讯招聘职位详情 2019/12/4有效
我爬取的是Python相关职位,先po上代码,(PS:本人小白,这是跟着B站教学视频学习后,老师留的作业,因为腾讯招聘的网站变动比较大,老师的代码已经无法运行,所以po上),一些想法和过程在后面. f ...
- 利用Crawlspider爬取腾讯招聘数据(全站,深度)
需求: 使用crawlSpider(全站)进行数据爬取 - 首页: 岗位名称,岗位类别 - 详情页:岗位职责 - 持久化存储 代码: 爬虫文件: from scrapy.linkextractors ...
随机推荐
- Django框架----数据库表的单表查询
一.添加表记录 对于单表有两种方式 # 添加数据的两种方式 # 方式一:实例化对象就是一条表记录 Frank_obj = models.Student(name ="海东",cou ...
- 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变
[Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...
- python模块-random随机数模块
导入随机数模块import random 1.random.random() 生成[0,1)之间的随机小数 2.random.randint(a,b) 生成[a,b]之间的随机整数 3.random. ...
- git和github的简单配合使用
1.安装git,TortoiseGit. 2.用帐号A登陆github,建立一个版本仓库test1.用默认值创建就可以了. 3.在本机用TortoiseGit克隆仓库test1.直接选https开头的 ...
- 20145315何佳蕾《网络对抗》MSF基础应用
20145315何佳蕾<网络对抗>MSF基础应用 实验过程记录 (1)一个主动攻击,ms08_067; 1.打开msfconsole 2.use exploit/windows/smb/m ...
- linux下的下载之道
a.场景: 平时会使用百度网盘下载电影,但是用ios版的百度云实在是有点慢,而平时不用windows,因此只能在linux上寻找解决之道. b.背景(我正在使用中): linux:ubuntu 14. ...
- Large Division(大数)题解
Given two integers, a and b, you should check whether a is divisible by b or not. We know that an in ...
- java中的抽象类和抽象方法
知识点:java中的抽象类和抽象方法 关键字abstract意为抽象的,可以用来修饰类和方法,分别称作抽象类和抽象方法 抽象类一般在多态的场景中使用 一:抽象类(abstract class) 在类的 ...
- NS3 实验脚本的编写步骤
第一步:配置主机,安装模块 (1)创建N个节点: NodeContainer nodes; nodes.Creat(N); 比如我目前接触到的PointToPoint,N就是2 (2)利用拓扑助手He ...
- 【译】第2节--- 什么是Code First?
原文链接:http://www.entityframeworktutorial.net/code-first/what-is-code-first.aspx EF从EF4.1中引入了Code-Firs ...