此次数据来源于腾讯招聘,仅作参考使用,如有侵权,请联系我740449043@qq.com,会立即删除

此次使用scrapy框架完成,首先,通过浏览器进入腾讯招聘的页面,因为需求不一样,所以抓包抓到的url也不一样,在这里,我是将国家定位于中国,城市定位为深圳,爬取腾讯2019年的招聘信息,数据清洗则主要使用了正则表达式,将清洗后的数据写入MySQL保存。

首先在items.py定义一下所需要爬取的数据名,简单来说就是定义变量


# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.htmlimport scrapy#定义目标数据的字段
class TCItem(scrapy.Item):# define the fields for your item here like:Job = scrapy.Field()                                  #职位CountryName = scrapy.Field()                        #所在国家LocationName = scrapy.Field()                        #所在城市BGName = scrapy.Field()                              #招聘部门CategoryName = scrapy.Field()                        #所属部门Responsibility = scrapy.Field()                      #要求LastUpdateTime = scrapy.Field()                      #最后更新时间

接下来我们需要编写爬虫部分,一个项目可以有多个爬虫,在这里面,先拿到每页的每一个岗位的URLl,通过正则匹配到需要抓取的信息,例如工作地点,任职要求,每拿到一条数据就返回一次,以提高执行效率,提取页码,然后通过拼接构造每一页的URL,翻到末页就结束递归。

# -*- coding: utf-8 -*-
import scrapy
import re#导入自定义的包
from MyScrapy.items import MyscrapyItemclass TengxunzpspiderSpider(scrapy.Spider):name = 'TengXunSpider'  # 识别名称allowed_domains = ['careers.tencent.com/']  # 爬取范围url_1 = r'https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1559004660890&countryId=&cityId=1&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=&pageIndex='page = 1url_2 = '&pageSize=10&language=zh-cn&area=cn'start_urls = [url_1 + str(page) + url_2]  # 起始urldef parse(self, response):data = response.body.decode('utf-8')                                     # 获取响应内容Job = re.findall(r'"RecruitPostName":"(.*?)",', data)                    # 职位CountryName = re.findall(r'"CountryName":"(.*?)",', data)                    # 所在国家LocationName = re.findall(r'"LocationName":"(.*?)",', data)                # 所在城市BGName = re.findall(r'"BGName":"(.*?)",', data)                            # 招聘部门CategoryName = re.findall(r'"CategoryName":"(.*?)",', data)            # 所属部门LastUpdateTime = re.findall(r'"LastUpdateTime":"(.*?)",', data)            # 最后更新时间Responsibility = re.findall(r'"Responsibility":"(.*?)",', data)          # 要求header = {'Accept': 'text / html, application / xhtml + xml, application / xml;q = 0.9, * / *; q = 0.8''Accept-Encoding:gzip, deflate, br''Accept-Language: en-US, en; q=0.8, zh-Hans-CN; q=0.5, zh-Hans; q=0.3''Host: movie.douban.com''Referer: https://movie.douban.com/''User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763'}for i in range(0, len(CountryName)):item = MyscrapyItem()item['Job'] = Job[i]item['CountryName'] = CountryName[i]item['LocationName'] = LocationName[i]item['BGName'] = BGName[i]item['LastUpdateTime'] = LastUpdateTime[i]item['Responsibility'] = Responsibility[i]item['CategoryName'] = CategoryName[i]yield item# 实现自动翻页# 1.获取当前url,提取页码信息beforurl = response.urlpat_1 = r'pageIndex=(\d*)&'page = re.search(pat_1, beforurl).group(1)# 2.构造下一页的url,发送下一次请求self.page += 1if self.page < 266:# 得到下一次请求的pageIndex信息# 构造下一页的url#self.url = self.url_1 + str(self.page) + self.url_2# 发送下一次请求yield scrapy.Request(self.url_1 + str(self.page) + self.url_2, callback=self.parse,dont_filter=True,headers=header)

数据的抓取,清洗部分已经写好了,接下来,我们要做的就是保存到数据库,这需要在管道文件pipelines.py中编写代码,以保存到数据库中


# -*- coding: utf-8 -*-# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.htmlimport pymysql#管道文件,负责item的后期处理或保存
class MyfirstscrapyPipeline(object):def __init__(self):#定义一些需要初始化的参数#连接数据库self.connect = pymysql.Connect(host='localhost',port=3306,user='*****',password='******',db='scrapyspider',charset='utf8')self.cursor = self.connect.cursor()#self.file = open('tengxun.csv','a+')#管道每次接收到item后执行的方法(必须实现)#return item 必须要有def process_item(self, item, spider):#往数据库写入数据'''self.cursor.execute('insert into tengxunzp_6_5(Job,CountryName,LocationName,BGName,CategoryName,LastUpdateTime) value (%s,%s,%s,%s,%s,%s)',(item['Job'],item['CountryName'],item['LocationName'],item['BGName'],item['CategoryName'],item['LastUpdateTime']#item['Responsibility']))'''self.connect.commit()#当爬取执行完毕时执行的方法def close_spider(self,spider):#关闭数据库self.cursor.close()self.connect.close()#self.file.close()

下面是写入到数据库的文件,仅2019年腾讯深圳招聘岗位数据如下

到这里,items.py里明确的定义要抓取的目标,爬虫部分执行并清洗数据,拿到了所需数据并返回给管道文件,管道文件写入到数据库并保存,在这里,由于前期定位较小,所以并没有使用代理IP,要没有使用自定义的IP代理池,有需求才有需要的功能,代码并不一定要很复杂,能很好的实现功能,才是代码执行的本质,废话就不多说,有时间得分析数据去了。

爬取腾讯招聘岗位薪资,分析互联网岗位需求相关推荐

  1. 从入门到入土:Python爬虫学习|实例练手|详细讲解|爬取腾讯招聘网|一步一步分析|异步加载|初级难度反扒处理|寻找消失的API来找工作吧

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  2. Python网络爬虫:爬取腾讯招聘网职位信息 并做成简单可视化图表

    hello,大家好,我是wangzirui32,今天我们来学习如何爬取腾讯招聘网职位信息,并做成简单可视化图表,开始学习吧! 文章目录 1. 网页分析 2. 获取json数据 3. 转换为Excel ...

  3. 爬虫实战——爬取腾讯招聘的职位信息(2020年2月2日)

    爬取腾讯招聘的职位信息 思路分析 特别说明 1.获取PostId列表 2.爬取详情页面 3.保存数据 完整代码 结果展示 总结分析 思路分析 特别说明 本文以Java工作岗位信息为例进行说明,如果想爬 ...

  4. python爬取2019年计算机就业_2019年最新Python爬取腾讯招聘网信息代码解析

    原标题:2019年最新Python爬取腾讯招聘网信息代码解析 前言 初学Python的小伙们在入门的时候感觉这门语言有很大的难度,但是他的用处是非常广泛的,在这里将通过实例代码讲解如何通过Python ...

  5. 爬虫入门经典(十三) | 一文教你简单爬取腾讯招聘

      大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语-不温不火,本意是希望自己性情温和.作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己 ...

  6. Python爬虫爬取智联招聘!谁说Python岗位少的?

    运行平台: Windows   Python版本: Python3.6   IDE: Sublime Text    其他工具:  Chrome浏览器 0.写在前面的话 本文是基于基础版上做的修改,如 ...

  7. Scrapy框架学习笔记 - 爬取腾讯招聘网数据

    文章目录 一.Scrapy框架概述 (一)网络爬虫 (二)Scrapy框架 (三)安装Scrapy框架 (四)Scrapy核心组件 (五)Scrapy工作流程 二. Scrapy案例演示 (一)爬取目 ...

  8. 腾讯python招聘_2019年最新Python爬取腾讯招聘网信息代码解析

    前言 初学Python的小伙们在入门的时候感觉这门语言有很大的难度,但是他的用处是非常广泛的,在这里将通过实例代码讲解如何通过Python语言实现对于腾讯招聘网站信息的抓取废话不多说,各位小伙伴们一起 ...

  9. 利用Crawlspider爬取腾讯招聘数据(全站,深度)

    需求: 使用crawlSpider(全站)进行数据爬取 - 首页: 岗位名称,岗位类别 - 详情页:岗位职责 - 持久化存储 代码: 爬虫文件: from scrapy.linkextractors ...

最新文章

  1. classes是什么意思怎么读_KY啥意思?托马仕空品教你怎么读空气
  2. Vue 学习 之 7.01 学习笔记
  3. 关于 iOS apps 的启动页设计,再唠叨几句
  4. opencv 和 parfor
  5. [深入学习C#]LINQ查询表达式详解(1)——基本语法、使用扩展方法和Lambda表达式简化LINQ查询
  6. mysql 动态hash_python动态渲染库_python 动态渲染 mysql 配置文件的示例
  7. tcp与udp的socket编程,udp代码实现客户端服务端,tcp代码实现客户端服务端(单线程、多线程、多进程分别实现),三次握手
  8. 日语学习 「バージョン」 version と 「リビジョン」 revision
  9. java多线程条件变量_30秒带你读懂Java并发包工具(JUC)之Condition(并发条件变量)...
  10. Java笔记(2)黑马刘意_Java入门_2019_idea版
  11. 3个极品在线PDF转换成WORD服务网站,比软件给力!
  12. 同花顺 行情服务器系统,[分享]完美运行同花顺,Linux下的股友有福了
  13. python实战项目分析2—物流
  14. 大学物理笔记——第二章质点动力学
  15. vue项目+高德地图
  16. html文本显示不完整,css 内容显示不全怎么办
  17. axios封装需要注意的增删改查传参易混淆点
  18. 高斯正反算—投影坐标转大地坐标、大地坐标转投影坐标(附有完整代码及测试结果)
  19. 对数据库中的数据(用户名/密码)加密解密
  20. python批量裁剪图片_python通过opencv实现批量剪切图片

热门文章

  1. CSS导航栏及下拉菜单
  2. java中引号嵌套_java和javascript双引号嵌套的问题
  3. 一千度近视眼学计算机,模拟从近视一千度度到远视1000度看到的效果
  4. MyBioSource 卵转铁蛋白 (LTF),ELISA 试剂盒研究
  5. 生物医学信号检测与处理实验5——2声表面波气体传感器+3电传感器+4吸湿膨胀引起的MEMS压力传感器漂移
  6. Linux下常用软件安装
  7. [软件工程基础]结对项目——地铁
  8. 【图像分割】基于GAC水平集方法实现图像分割matlab 源码
  9. Altium AD20过孔盖油,通过设计规则实现过孔盖油,简便实用不会造成遗漏出错
  10. 国科大学习资料--VLSI测试与可测试设计--2020期末考试试题