爬取前程无忧(一)

  • 步骤:
  • 1.解析url
  • 2.获取url上的内容
  • 3.对获取的内容进行解析
  • 4.对解析后的内容进行存储

步骤:

1.解析url

首先,明确我们的目的:爬取51上所有的python岗位的相关职位信息
这是我们的原始url:

https://search.51job.com/list/010000,000000,0000,00,9,99,python,2,3.html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=

当然我们的有效url仅有:

https://search.51job.com/list/010000,000000,0000,00,9,99,python,2,3.html

根据我们的观察一共有六页
我们打开第二页,第三页对比一下

第一页:https://search.51job.com/list/010000,000000,0000,00,9,99,python,2,1.html
第二页:https://search.51job.com/list/010000,000000,0000,00,9,99,python,2,2.html
第三页:https://search.51job.com/list/010000,000000,0000,00,9,99,python,2,3.html

ok,我们可以很明显的发现规律,
url中python页码,没错这就是我们需要处理的第一个点
首先将我们的URL进行一个完整的表述,我们可以这样做:
在这里我们的key可以采取从屏幕上进行获取

key = input('请输入想查询的职业/岗位:' )
for i in range(6):url = 'https://search.51job.com/list/010000,000000,0000,00,9,99,' + str(key) + ',2,' + str(i+1) + '.html'

这里我们可以输出看一下我们的url

ok,我们的url就这样处理好了

2.获取url上的内容

我们已经获取了所有的网页地址,接下来我们使用requests库的get请求来获取网页上的内容,同时给我们的爬虫加上一点小小的伪装,
首先要导入库

import requests

然后使用requests库的get请求来得到我们的网页源码,

response = requests.get(url=url,headers=headers)

response里面就包含了我们需要的内容,我们可以查看其内容

print(response.status_code)  # 打印状态码,状态码200表示ok
print(response.url)          # 打印请求url
print(response.headers)      # 打印头信息
print(response.cookies)      # 打印cookie信息
print(response.text)         # 以文本形式打印网页源码
print(response.content)      # 以字节流形式打印

headers则是请求头,是区分浏览器和程序的必要元素,

更多的请求头信息可以查看大佬:https://blog.csdn.net/gklcsdn/article/details/101522169

如何查看我们的请求头呢,我们用Google浏览器打开我们的网页,按下F12进行元素检查,然后你就可以看到一串前端代码,

我们找到network,点进去,然后刷新我们的页面,点开文件,这里就可以看到很多的信息了,
然后我们找到我们需要的进行添加,

3.对获取的内容进行解析

这里我们使用xpath模块来进行解析

response.encoding = 'gbk'
tree = etree.HTML(response.text)   ## 解析HTML文档,返回根节点对象
divs = tree.xpath('//div[@class = "dw_table"]/div[@class = "el"]')

tree.xpath:在源码中找出我们所需要的信息(直接找我们需要的即可,注意)

来一个for循环,将我们得到的每一个值都进行保存。

gszw = div.xpath('.//p//a/@title')[0]
gsmc = div.xpath('.//span[@class = "t2"]/a/@title')[0]
gzdd = div.xpath('.//span[@class = "t3"]/text()')[0]
gzxc = div.xpath('.//span[@class = "t4"]/text()')[0]
fbsj = div.xpath('.//span[@class = "t5"]/text()')[0]

至此,我们就已经得到了全部的数据

4.对解析后的内容进行存储

我们获取数据自然是为了将数据进行保存,而后进行分析,这里简单的将数据保存为json文件和csv文件

完整代码:

import requests
from lxml import etree
import json,csv,timeif __name__ == '__main__':key = input('请输入想查询的职业/岗位:' )for i in range(6):url = 'https://search.51job.com/list/010000,000000,0000,00,9,99,' + str(key) + ',2,' + str(i+1) + '.html'time.sleep(1)data = []fp = open('./51job_python.json',mode='a',encoding='utf-8')fp2 = open('./51job2_python.csv',mode='a',encoding='utf-8')headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'}response = requests.get(url=url,headers=headers)response.encoding = 'gbk'tree = etree.HTML(response.text)divs = tree.xpath('//div[@class = "dw_table"]/div[@class = "el"]')try:for div in divs:gszw = div.xpath('.//p//a/@title')[0]gsmc = div.xpath('.//span[@class = "t2"]/a/@title')[0]gzdd = div.xpath('.//span[@class = "t3"]/text()')[0]gzxc = div.xpath('.//span[@class = "t4"]/text()')[0]fbsj = div.xpath('.//span[@class = "t5"]/text()')[0]d = dict()d['职位'] = gszwd['公司'] = gsmcd['地区'] = gzddd['薪酬'] = gzxcd['时间'] = fbsjdata.append(d)if gzxc == None:gzxc = 'mianyi'print("一条信息获取成功")reslit = json.dumps(data,ensure_ascii = False)fp.write(reslit)fp2.write('\n\n职位:%s。\n公司:%s。\n地区:%s。\n薪酬:%s。\n时间:%s'%(gszw,gsmc,gzdd,gzxc,fbsj))except Exception as e:fp2.write('\n\n职位:%s。\n公司:%s。\n地区:%s。\n薪酬:%s。\n时间:%s' % (gszw, gsmc, gzdd, '面议', fbsj))fp.close()fp2.close()

至于为什么是前程无忧,而不是Boss和智联

51job:爬取没有限制
boss直聘:需要设置IP,重点设置动态IP
智联:动态抓取,重点获取数据接口

嗯,任重道远。

分分钟爬取51job相关推荐

  1. Python爬虫,爬取51job上有关大数据的招聘信息

    Python爬虫,爬取51job上有关大数据的招聘信息 爬虫初学者,练手实战 最近在上数据收集课,分享一些代码. 分析所要爬取的网址 https://search.51job.com/list/000 ...

  2. SeleniumChrome实战:动态爬取51job招聘信息

    一.概述 Selenium自动化测试工具,可模拟用户输入,选择,提交. 爬虫实现的功能: 输入python,选择地点:上海,北京 ---->就去爬取上海,北京2个城市python招聘信息 输入会 ...

  3. 对爬取51job中用到的技巧的分析、记录

    一个简单的实践,爬取51job有关大数据的工作,并进行分析. 在这里做一个记录. 主要思路是在网上找到的一篇博文,之前也做过类似的东西,本身没有什么难度,这里我就将细节细细的过一遍,巩固一下所学吧 参 ...

  4. scrapy模拟浏览器爬取51job(动态渲染页面爬取)

    scrapy模拟浏览器爬取51job 51job链接 网络爬虫时,网页不止有静态页面还有动态页面,动态页面主要由JavaScript动态渲染,网络爬虫经常遇见爬取JavaScript动态渲染的页面. ...

  5. Python Scrapy爬虫框架爬取51job职位信息并保存至数据库

    Python Scrapy爬虫框架爬取51job职位信息并保存至数据库 -------------------------------- 版权声明:本文为CSDN博主「杠精运动员」的原创文章,遵循CC ...

  6. 爬取51job职位信息--进行专业市场需求可视化分析(python、tableau、DBeaver)

    爬取51job信管专业相关岗位的情况进行可视化分析. 采用工具:python.tableau(可视化).DBeaver(数据库管理软件) 文章目录 一.数据爬取 1.1导入相关的库 1.2对每个岗位搜 ...

  7. python爬取51job的示例

    如何爬取51job的岗位和薪资信息,可参考以下代码 import json import re import sqlite3 import urllib.error import urllib.req ...

  8. 使用Python爬取51job招聘网的数据

    使用Python爬取51job招聘网的数据 进行网站分析 获取职位信息 存储信息 最终代码 进行网站分析 进入https://www.51job.com/这个网站 我在这就以python为例搜索职位跳 ...

  9. 新手爬取51job,智联,boss网站职位信息总结和代码(小杜总结)

    爬取要求: (1) 使用合适的数据保存手段保存爬取数据 (2) 记每条数据的爬取时间 (3) 实现数据的增量爬取 (4) 实现同时基于关键字和页面 URL 的去重元数据说明: 一 统一注意事项或建议 ...

最新文章

  1. 挖矿木马的战略战术分析
  2. 关于运行robot framework 报错解决方法,ModuleNotFoundError: No module named 'robot'
  3. 获取dbgrid的行索引
  4. Java黑皮书课后题第5章:5.6(英里与千米之间的互换)编写一个程序,并排显示下面两个表格
  5. 初一模拟赛总结(2019.6.1)
  6. ajax长链接--拉实现
  7. 如何在typescript中使用axios来封装一个HttpClient类
  8. Git(10)-merge
  9. JAVA中MD5加密实现
  10. sys_guid() mysql写法_PostgreSQL Oracle 兼容性之 - sys_guid()
  11. 假设检验与区间估计的异同
  12. 杭电算法题 HDU 1000-1004
  13. idata 单片机 新唐_半导体新唐单片机怎么样_新唐单片机是台湾的吗
  14. FU-A STAP-A
  15. android 浏览器上传图片,Android 开发 使用WebUploader解决安卓微信浏览器上传图片中遇到的bug...
  16. excel打乱各行的顺序,实现无序随机排列
  17. Java获取国家节假日规定休息日期
  18. 选择FPGA,认识“她”。
  19. C++调用Lua出现 unproteted error in call to Lua API错误的发现过程与解决方法
  20. 虚拟机关机出现shutting down... running guests on default URT

热门文章

  1. shell命令sh、dash、bash、rbash的区别
  2. Springboot毕设项目风云网吧管理系统57g27(java+VUE+Mybatis+Maven+Mysql)
  3. 无锡合全药业有限公司新药制剂开发服务及制剂生产项目中消防应急照明和疏散指示系统的应用
  4. 钢铁行业,煤炭行业,有色金属行业的历史利润,负债率
  5. 为什么无法链接mysql_为什么不能连接到SQL数据库?
  6. 简单移动平均 指数移动平均
  7. 低版本macOS下载sketch无法打开和意外退出解决办法
  8. virsh查询虚拟机列表
  9. ShellCode —— 入门
  10. 什么是 shellcode