本文介绍使用Python编写爬虫,获取招聘网站中感兴趣的职位信息。html
好的开始,成功一半。另外一半呢?知己知彼,百战百胜。python
推荐使用Anaconda发行版,其包含了多个科学包及其依赖项。官网为:https://www.anaconda.com/app
能够从官网下载安装包,在本地安装,将安装以后的位置做为环境变量加入到系统环境变量的PATH中。编辑器
Anaconda通常安装以后的位置为:C:\ProgramData\Anaconda3ide
IDE(集成开发环境,Integrated Development Environment ):这一类开发环境通常包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套件。工具
推荐使用PyCharm的社区版,官网为:https://www.jetbrains.com/pycharmpost
这里的目标就是指要爬取的内容,打开招聘网站:https://www.51job.com:在搜索框中输入python,并点击搜索,会获得下面的结果,一共63页,3000余条职位信息:网站
里面的每个职位点开以后的页面包含职位的相关信息,咱们的目标就是将这些信息爬取并保存到本地。ui
全部的职位信息页面的网址相似于以下形式:url
https://jobs.51job.com/nanjing-jnq/91355381.html?s=01&t=0 https://jobs.51job.com/wuxi/97144561.html?s=01&t=0 https://jobs.51job.com/nanjing-qhq/106264137.html?s=01&t=0 。。。
这些页面网址没有多少规律可循,可是能够从职位搜索结果页面中获取到:
经过获取任意页数的职位名这一位置的连接,就可以获取这些职位信息的连接页面。
https://search.51job.com/list/070000,000000,0000,00,9,99,Python,2,1.html?lang=c&stype=1&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=4&dibiaoid=0&address=&line=&specialarea=00&from=&welfare= https://search.51job.com/list/070000,000000,0000,00,9,99,Python,2,2.html?lang=c&stype=1&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=4&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=
搜索结果地址中的python是查询的关键字,两个连接的差别之处,就是查询结果的第几页,因此能够根据这一点构建全部的搜索结果页面。
KEYWORD = 'python' MAX_PAGE = 10 for i in range(MAX_PAGE + 1): temp_url = 'https://search.51job.com/list/070000,000000,0000,00,9,99,' + KEYWORD + ',2,' + str( i) + '.html?lang=c&stype=1&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=4&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='
经过requests包的的请求功能,获取到页面:
r = requests.get('https://jobs.51job.com/nanjing-jnq/91355381.html?s=01&t=0') r.encoding = 'gbk' print(r.text)
在搜索结果页面中须要解析出每个职位的连接,同时在职位详细信息页面,要解析出职位名称,公司名称,工资,所在城市,职位信息等内容。
解析可使用python中的lxml库进行解析,最经常使用的解析方式为xpath方式,经过Chrome中的F12开发者工具来获取xpath并调试。
在F12开发者工具中,左上角的选择按钮能够在页面上选取感兴趣的元素,而后下面的元素窗口将高亮显示选中的元素。
在高亮显示的元素上,右键单击,在弹出的菜单中选择Copy -> Copy XPath,便可得到此元素的XPath。
而后在此元素基础之上,能够经过@属性的方式获取元素的属性值,例如得到职位的连接地址:
//*[@id="resultList"]/div[4]/p/span/a/@href 结果为: https://jobs.51job.com/nanjing/107228497.html?s=01&t=0
或经过text()方式获取元素的显示内容,例如职位详细信息里面的各项值:
/html/body/div[3]/div[2]/div[2]/div/div[1]/strong/text() 结果为: 0.5-1.5万/月
为方便后续的数据分析和绘图,咱们将结果存储在excel表中,经过openpyxl库来实现。
在openpyxl中,主要用到三个概念:Workbooks,Sheets,Cells。Workbook就是一个excel工做表;Sheet是工做表中的一张表页;Cell就是一个单元格。
首先引入库:
from openpyxl import Workbook
而后建立xlsx文件:
wb = Workbook()
获取激活的sheet:
sheet = wb.active
在其中编辑单元格的内容,将前面获取的职位信息写入到表格中:
sheet.append(list(temp_info.values()))
最后将wb保存成一个文件:
wb.save('result.xlsx')
完整代码参见附件。
验证:星空