背景

想了解从事python相关岗位需要具备什么技能,于是就想从招聘网站上的职位需求入手,把信息获取下来后,生成词云,这样就能很直观的看出来哪些技能是python相关岗位需要具备的了。

技术概览

scrapy

request

wordcloud

jieba

python37

XPATH

正则表达式

具体内容

获取到上海+python的岗位页面

获取每页30个的岗位的职位信息

自动翻页获取

解决反爬的问题

生成词云

关于scrapy的介绍可以参考左边链接,我就直接开始介绍我是怎么实现的吧。

打开boss直聘的web页面,定位就是上海,输入python之后,发现url发生了变化(query的值是python,city的值是101020100)这里我们可以验证下,把query改成java后面就跳转到java相关岗位的页面,而city也是一样的,101020100是上海市的编号,其他城市的编号可以直接在web源码上获取。

现在我们来看如何获取岗位信息,手动操作的话就是点击岗位标题即可进入详细岗位介绍的界面,打开开发者工具可以发现岗位标题这里实际上是个跳转链接,我们可以通过xpath(//[@class="name"]//@href)来获取当前页面的链接再配合正则'/job_detail.?.html'精确我们需要的链接,最后跟('https://www.zhipin.com')组合起来就是完整的url。

def parse(self, response):

job = response.xpath('//*[@class="name"]//@href').extract()

job = re.findall('/job_detail.*?.html', str(job))

print('job:{}'.format(job))

for i in range(30):

print('当前在{}项岗位'.format(i))

job_url = 'https://www.zhipin.com'+job[i]

yield scrapy.Request(url=job_url, callback=self.parse_job)

def parse_job(self, response):

item = BossItem()

item['job_desc'] = response.xpath('//*[@class="job-sec"]//div[@class="text"]/text()').extract()

yield item

翻页,手动点击翻页可以看到page信息发生了变化,page的值就是实际的页数,可以尝试修改page验证下,尤其是第一页有可能不适用这个方法,scrapy自带的start_urls列表就可以实现手动的翻页。

反爬,我是设置了随机的useragent以及ip代理。useragent可以帮助我们的爬虫伪装成普通的浏览器,而代理ip解决被服务器识别并且封ip的问题。这里不得不提一个坑,就是python37+scrapy1.7.1的环境跟旧的环境中间件的设置有变化的地方,就是request.meta['proxy']一定要改成request.meta['http_proxy'],才能用,不然就会一直各种报错(10060,10061还有就是403,302等http的状态码)。我们也可以在setting文件中设置CONCURRENT_REQUESTS(Scrapy downloader 并发请求的最大值)为1,DOWNLOAD_DELAY(下载器在下载同一个网站下一个页面前需要等待的时间)为30s,这样也可以防止我们被封ip。免费的ip代理池的话可以通过右边链接的教程获取,亲测可用。免费ip代理获取教程

class MyUserAgentMiddleware(UserAgentMiddleware):

def __init__(self, agents):

self.agents = agents

@classmethod

def from_crawler(cls, crawler):

return cls(

agents=crawler.settings.get('USER_AGENTS')

)

def process_request(self, request, spider):

agent = random.choice(self.agents)

request.headers['User-Agent'] = agent

print('now user-agent is:' + agent)

def process_response(self,request,response,spider):

return response

class ProxyMiddleware(HttpProxyMiddleware):

'''

设置Proxy

'''

def __init__(self, ip):

self.ip = ip

@classmethod

def from_crawler(cls, crawler):

return cls(ip=crawler.settings.get('PROXIES'))

def process_request(self, request, spider):

ip = random.choice(self.ip)

request.meta['http_proxy'] = ip

print('now ip is:'+ip)

def process_response(self,request,response,spider):

if response.status != 200:

ip = random.choice(self.ip)

request.meta['http_proxy'] = ip

print('change ip is:' + ip)

return request

return response

最后的词云生成一开始我是写在pipeline.py文件里,这样scrapy会自动在获取到数据后进行生成词云,但是我发现每获取一次生成一次也很浪费时间,还是全部获取完另外生成比较方便,这里就用到jieba分词,分完后可以通过wordcloud设置词云的大小,词汇量,背景,颜色,字体等等,有不合适的词汇设置停用词去掉即可。

class BossItem(scrapy.Item):

#写在item.py文件里

# define the fields for your item here like:

job_desc = scrapy.Field()

class BossPipeline(object):

#写在pipeline.py文件里

def process_item(self, item, spider):

text = ''.join(item['job_desc'])

d = path.dirname(__file__)

with open(path.join(d, 'zhipin.txt'), 'a', encoding='utf-8') as f:

f.write(text)

return item

# encoding:utf-8

from os import path

from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator

import matplotlib.pyplot as plt

import numpy as np

from PIL import Image

import jieba

#词云制作

d = path.dirname(__file__)

text = open(path.join(d, 'zhipin.txt'),encoding='utf-8').read()

stopwords = [line.strip() for line in open(path.join(d, 'ban.txt'), 'r').readlines()]

wordlist = jieba.cut(text)

outstr = ''

for word in wordlist:

if word not in stopwords:

if word != '\t':

outstr += word

outstr += " "

wordcloud = WordCloud(width=1000, height=1000, font_path='HYQiHeiY4-95W.otf').generate(outstr)

wordcloud.to_file(path.join(d,"cloud_word.png"))

总结

以上就是我使用scrapy框架的Spider来爬取BOSS直聘上职位信息的具体实现方式,其实一开始我想要爬不同地区的python相关的岗位,但是这样一来就不能简单的通过start_urls列表来实现翻页,因为不同地区的页数不固定,得先获取到总页码,这里就涉及到:不同地区的url队列、同一个地区的不同页面的url队列、同地区同页面的不同岗位的url队列,因此简单的Spider无法实现,需要用到CrawlSpider,这里我就先写了简单版的,有机会再学习下CrawlSpider。这里生成的词云好像也没有什么特别的参考价值,大家还是找一找自己心仪的岗位有针对性的去学习吧哈哈哈。源码的话可以去我的github获取。

python爬取boss直聘招聘信息_python学习之路-爬取boss直聘的岗位信息相关推荐

  1. python爬取boss直聘招聘信息_Python 爬取boss直聘招聘信息!

    原标题:Python 爬取boss直聘招聘信息! 1.一些公共方法的准备 获取数据库链接: importpymysql ''' 遇到不懂的问题?Python学习交流群:821460695满足你的需求, ...

  2. python爬取boss直聘招聘信息_Python爬虫实战-抓取boss直聘招聘信息

    Python Python开发 Python语言 Python爬虫实战-抓取boss直聘招聘信息 实战内容:爬取boss直聘的岗位信息,存储在数据库,最后通过可视化展示出来 PS注意:很多人学Pyth ...

  3. python爬取boss直聘招聘信息_Python笔记-爬取Boss直聘的招聘信息

    2018-05-09笔记: 最近迷上了爬虫,爬取招聘信息,存在MongoDB上 代码思路和上一篇爬取酷狗TOP500差不多,但是在使用CSS选择器的时候,有两组信息是连在一起,所以使用正则来获取 本来 ...

  4. python爬取招聘信息_python 爬取boss直聘招聘信息实现

    原标题:python 爬取boss直聘招聘信息实现 1.一些公共方法的准备 获取数据库链接: importpymysql ''' 遇到不懂的问题?Python学习交流群:821460695满足你的需求 ...

  5. chrome driver 获取 session_BOSS直聘招聘信息获取之使用webdriver进行爬取

    点击蓝色" 不太灵光的程序员"关注我哟 加个"星标",每天上午 09:30,干货推送! 进行网页数据爬取的方式有很多,我前面使用了requests模块添加浏览器 ...

  6. 基于‘BOSS直聘招聘信息’分析企业到底需要什么样的PHPer

    基于'BOSS直聘招聘信息'分析企业到底需要什么样的PHPer 前两篇文章都没看,好意思直接看结果? Python爬虫框架Scrapy实战 - 抓取BOSS直聘招聘信息 Pyhton爬虫实战 - 抓取 ...

  7. 【2020-10-27】 scrapy爬虫之猎聘招聘信息爬取

    声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! scrapy爬虫之猎聘招聘信息爬取 1.项目场景 目标网址:https://www.liepin.com/zhao ...

  8. python3 爬虫 requests安装_BOSS直聘招聘信息获取之爬虫工具分析

    点击蓝色"不太灵光的程序员"关注我哟 加个"星标",每天上午 09:30,干货推送! 文中使用的组件库仅限于Python语言,由于最近收到一些同学的留言说,按照 ...

  9. Python爬虫你需要积累这些基本知识_Python学习基础路线

    Python爬虫你需要积累这些基本知识_Python学习基础路线 爬虫定义.分类和流程 爬虫定义 网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则, ...

最新文章

  1. js 获取时间对象代码
  2. 深入学习jQuery鼠标事件
  3. SpringMVC的请求-文件上传-单文件上传的代码实现1
  4. PHP汉字转化为拼音
  5. DELMIA软件:机器人与行走轴联动实现长焊缝弧焊焊接虚拟仿真
  6. JAVA关于实现科大讯飞语音合成功能
  7. 资料:高等数学学习笔记——高等数学(二)学习笔记汇总
  8. PS修改图片局部颜色
  9. 如何用计算机设计衣服,如何用电脑设计服装
  10. 智能生活管家项目之一-系统简介
  11. 紫光云这匹黑马,了解一下
  12. 游戏‘微信打飞机 第一课
  13. GooglePlay提审警告(com.google.android.gms:play-services-safetynet:17.0.0)
  14. 实现连续签到案例的可能(使用)
  15. 循环中的continue与break语句
  16. ssh突然无法登录,报错failed to start openssh daemon
  17. Linux,ubuntu 格式化移动硬盘
  18. SQL语句整理三--hive
  19. Ubuntu内核编译教程-编译Linux4.5.0内核
  20. Oracle IMP-00003: 遇到 ORACLE 错误 20001,导数据出现问题

热门文章

  1. html显示宇宙星星,css 如何在html页面上输出一个六角星星呢?
  2. 85人教版高中英语第一册第十四课 WATCHING ANTS
  3. 中文组织机构名与简称的识别
  4. java获取PDF页面长宽
  5. 网络工程与组网技术——第二讲
  6. GitHub客户端的基本操作
  7. 计算机术语ap和交换机,AP模式和Router模式区别是什么
  8. win10无法打开此计算机上的组策略对象。你可能没有相应的权限
  9. 使用Unity简单实现RayMarching
  10. simulink中mask设置_Simulink中封装子系统