安装

首先,我们需要安装pycharm和mysql

官网链接:https://www.jetbrains.com/pycharm/,https://www.mysql.com/

1.连接数据库

目录

1.连接数据库

  1. 第一步如果我们没有连接过数据库的话,需要先下载插件点半,即在文件->设置->插件->db

显示已完成后重启pycharm

2.重启后,点击位于pycharm左边的菜单栏打开DB Browser

点击‘+’,选择mysql

在输入用户名和密码后进行test connection,若出现如下错误:

 按下win+r,打开cmd,登录你的mysql账号后,输入:set global time_zone='+8:00';后显示

说明时区更改成功,关闭cmd,重新test connection,显示

连接成功。

创建一个py项目,导入pymysql包

输入:

​
db = pymysql.connect(host='localhost',port=3306,user='root',password="121200",db='students',charset='utf8'
)​

然后输入#拿到游标

cursor = db.cursor()

写一个创建表的函数:

def create():db = pymysql.connect(host="localhost", user="root", password="121200", database="students")  # 连接数据库cursor = db.cursor()cursor.execute("DROP TABLE IF EXISTS data")#如果已经存在表格data则删除sql = """CREATE TABLE data (ID INT PRIMARY KEY AUTO_INCREMENT,post  CHAR(255),company  CHAR(255),address CHAR(255),salary_min CHAR(255),salary_max CHAR(255),job CHAR(255),degree  CHAR(255),edu  CHAR(255))"""cursor.execute(sql)db.close()

2.爬取https://www.51job.com/的招聘信息

例如我们爬取Python工程师的招聘信息数据:

首先创建一个header的列表

打开前程无忧按下f12,点击Network选择第一条:

在Header栏下找到Cookie复制进入header,再找到user-agent(浏览器)复制后放入header

复制网站地址,获得url=‘ https://search.51job.com/list/000000,000000,0000,00,9,99,python%25E5%25B7%25A5%25E7%25A8%258B%25E5%25B8%2588,2,1.html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=’

通过往后翻取页数发现url变化在于.html之前的数字即数字为页数

若我们爬取前10页数据:则

 for page in range(1, 5):url = 'https://search.51job.com/list/000000,000000,0000,00,9,99,python%25E5%25B7%25A5%25E7%25A8%258B%25E5%25B8%2588,2,{}.html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare='.format(page)

接着我们使用requests函数通过user-agent获取网站数据

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

这时我们可以先运行不会报错后,我们继续获取数据。

现在我们已经有了获取网页数据的资格了,于是我们使用正则查找获取数据。鼠标右键打开网页源码,在465行找到包含了所有数据的位置,于是我们使用findall函数,直接获取所有数据。((.*?)获取中间的所有数据)

r = re.findall('<script type="text/javascript">window.__SEARCH_RESULT__ = (.*?)div class="clear"></div>', response,re.S)

由于里面数据排列不是很规范不宜与提取,所以我们使用''.join()函数,将其中每个数据用''括起来,然后使用json.loads函数将str转换成dict。

​
string = ''.join(r)
infodict = json.loads(string)

观察可知,我们所需的岗位信息等数据都在engine_search_result的列表里,所以我们应该直接缩小范围为爬取engine_search_result列表内容:

engine_search_result = infodict['engine_search_result']

由于每条招聘信息中公司名称、地理位置等信息都是循环出现,且变量名相同,所以我们可以使用for循环写入数据库,但由于薪资待遇的最大最小值是由‘-’连接的一个数据所以为将两个数据分开后存入数据库,再使用一次正则查找,但由于存在salary没有的情况,所以使用一个try函数规避salary为赋值的情况。对上传日期,工作经验,学历等的爬取同上。

        for i in engine_search_result:job_name = i['job_name']  # 工作名称workarea_text = i['workarea_text']  # 工作地company_name = i['company_name']  # 公司名称providesalary_text = i['providesalary_text']  # 工资salary = re.findall(r"\d+\.?\d*", providesalary_text)print(salary)try:salary_min = salary[0]salary_max = salary[1]except:IndexError: "list index out of range"updatedate = i['updatedate']  # 上传日期attribute_text = i['attribute_text']a = []a = attribute_textdegreefrom = a[1]  # 工作经验edu = a[2]  # 学历

2.存入数据库

编写一个sql语句写成的insert函数

def insert(value):db = pymysql.connect(host="localhost", user="root", password="121200", database="students")cursor = db.cursor()sql = "insert into students.data_1(post,company,address,salary_min,salary_max,job,degree,edu) values (%s,%s,%s,%s,%s,%s,%s,%s)"try:cursor.execute(sql, value)db.commit()print('插入数据成功')except:db.rollback()print("插入数据失败")db.close()

完整代码如下:

import reimport pymysql
import json
# 请求头
import requestsdef create():db = pymysql.connect(host="localhost", user="root", password="121200", database="students")  # 连接数据库cursor = db.cursor()cursor.execute("DROP TABLE IF EXISTS data_1")  # 如果已经存在表格data则删除sql = """CREATE TABLE data_1 (ID INT PRIMARY KEY AUTO_INCREMENT,post  CHAR(255),company  CHAR(255),address CHAR(255),salary_min CHAR(255),salary_max CHAR(255),job CHAR(255),degreeform  CHAR(255),edu  CHAR(255))"""cursor.execute(sql)db.close()def insert(value):db = pymysql.connect(host="localhost", user="root", password="121200", database="students")cursor = db.cursor()sql = "insert into students.data_1(post,company,address,salary_min,salary_max,job,degreeform,edu) values (%s,%s,%s,%s,%s,%s,%s,%s)"try:cursor.execute(sql, value)db.commit()print('插入数据成功')except:db.rollback()print("插入数据失败")db.close()headers = {'Cookie': 'guid=1e658418e5c26810ae320ac5c3d625ef; nsearch=jobarea%3D%26%7C%26ord_field%3D%26%7C%26recentSearch0%3D%26%7C%26recentSearch1%3D%26%7C%26recentSearch2%3D%26%7C%26recentSearch3%3D%26%7C%26recentSearch4%3D%26%7C%26collapse_expansion%3D; ssxmod_itna=eqGOqfxmxIxjxmqGKGHRx1BWtEmDCq4ehmqPmbKDsoWDSxGKidDqxBecjeDteW3YADxxzGFrmrKeNF2LTdItFx44XatI/qqGLDmKDy7A8G3Dx1q0rD74irDDxD3yD7PGmDim1uXTqAQDQ4GyDitDKuX/DG3D0S==CGGyWnLyDBtXDGU7zqGIDYQD0kKD+S=llqGgl4GuDMWXYnNqumxlGA6isqDMbPGX70HoxDUsqIDDbOpneWiFxG6e6qQqx0PGm7PPfB5PBh4enF4KKH+flh4rYsqKKA4KF7khQ4+QDRz4DD3wAioPeD==; ssxmod_itna2=eqGOqfxmxIxjxmqGKGHRx1BWtEmDCq4ehmqPm4ikf8bDlxS0Dj4bo6Mdidqbc/DGq=KiBorx=PiR2G5wh8AZwHb4nClS8N8GnbwLKzqDqQMt5G5mCi0vGriQLcC3/ULKwxXbywC+HFT=iR2dISg3X7YE1WGiszOr0Cj0HFfjVR8GqaBNylOb9l3UzmYvuYL232kRTNb=HyOYFkwvO=aQn3d5y9hW9i09150dskp7zYm9+Nl2z=aa293uMYLuf1p2VjLGwZb0BizG87bQx5vyH+3fjCUR5TTj5Ou6mD37RU4gzfO5NRx4zg3oxeU2Wpuo5ioDohcixjrTDh1fd5Su=qoz83t2MTcYwx3trgkoxHOhoBRdErWXYtiQbnissqIU44E8qob4YDxvEY9iptErqn+woCnMYFwid8QB4YPL=3rs0ArEhxBfHS2KAj3Qx3L3x3x7yh=3BTGEC3b=IE3foCPq8Q2YKLrjxKTk+Q4L+kddY11k5GYIFfQhqKiLxlbPD7j4GmYpYqmcBa4M0GLeeP7f=7fGiDwGcdvOQTwGeeDjKDewD8gDYGx4D===; partner=sem_pcsogoupz_1; slife=lowbrowser%3Dnot%26%7C%26; search=jobarea%7E%60000000%7C%21ord_field%7E%600%7C%21recentSearch0%7E%60000000%A1%FB%A1%FA000000%A1%FB%A1%FA0000%A1%FB%A1%FA00%A1%FB%A1%FA99%A1%FB%A1%FA%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA9%A1%FB%A1%FA99%A1%FB%A1%FA%A1%FB%A1%FA0%A1%FB%A1%FApython%B9%A4%B3%CC%CA%A6%A1%FB%A1%FA2%A1%FB%A1%FA1%7C%21recentSearch1%7E%60000000%A1%FB%A1%FA000000%A1%FB%A1%FA0000%A1%FB%A1%FA00%A1%FB%A1%FA99%A1%FB%A1%FA%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA9%A1%FB%A1%FA99%A1%FB%A1%FA%A1%FB%A1%FA0%A1%FB%A1%FApython%A1%FB%A1%FA2%A1%FB%A1%FA1%7C%21recentSearch2%7E%60000000%A1%FB%A1%FA000000%A1%FB%A1%FA0000%A1%FB%A1%FA00%A1%FB%A1%FA99%A1%FB%A1%FA%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA9%A1%FB%A1%FA99%A1%FB%A1%FA%A1%FB%A1%FA0%A1%FB%A1%FAjava%A1%FB%A1%FA2%A1%FB%A1%FA1%7C%21recentSearch3%7E%60000000%A1%FB%A1%FA000000%A1%FB%A1%FA0000%A1%FB%A1%FA00%A1%FB%A1%FA99%A1%FB%A1%FA%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA9%A1%FB%A1%FA99%A1%FB%A1%FA%A1%FB%A1%FA0%A1%FB%A1%FAPython%A1%FB%A1%FA2%A1%FB%A1%FA1%7C%21recentSearch4%7E%60010000%A1%FB%A1%FA000000%A1%FB%A1%FA0000%A1%FB%A1%FA00%A1%FB%A1%FA99%A1%FB%A1%FA%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA99%A1%FB%A1%FA9%A1%FB%A1%FA99%A1%FB%A1%FA%A1%FB%A1%FA0%A1%FB%A1%FAPython%A1%FB%A1%FA2%A1%FB%A1%FA1%7C%21collapse_expansion%7E%601%7C%21','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3870.400 QQBrowser/10.8.4405.400'
}def main():create()for page in range(1, 11):url = 'https://search.51job.com/list/000000,000000,0000,00,9,99,python%25E5%25B7%25A5%25E7%25A8%258B%25E5%25B8%2588,2,{}.html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare='.format(page)response = requests.get(url, headers=headers).text# 正则查找r = re.findall('window.__SEARCH_RESULT__ = (.*?)</script>', response,re.S)string = ''.join(r)infodict = json.loads(string)# 字典的键获取对应的键值engine_search_result = infodict['engine_search_result']for i in engine_search_result:job_name = i['job_name']  # 工作名称workarea_text = i['workarea_text']  # 工作地company_name = i['company_name']  # 公司名称providesalary_text = i['providesalary_text']  # 工资salary = re.findall(r"\d+\.?\d*", providesalary_text)print(salary)try:salary_min = salary[0]salary_max = salary[1]except:IndexError: "list index out of range"updatedate = i['updatedate']  # 上传日期# attribute_text = []attribute_text = i['attribute_text']a = []a = attribute_textdegreefrom = a[1]  # 工作经验edu = a[2]  # 学历# 插入数据库value = (updatedate, company_name, workarea_text, salary_min, salary_max, job_name, degreefrom, edu)insert(value)if __name__ == '__main__':main()

爬取数据如下:

0基础爬虫前程无忧招聘信息相关推荐

  1. 抓取前程无忧招聘信息

    抓取前程无忧招聘信息 本文通过分析前程无忧的相关规则,通过python来抓取相关的招聘信息,并通过redis缓存相关信息,实现增量抓取. 相关技术 python3.6 requests redis m ...

  2. 前程无忧招聘信息爬取

    爬取前程无忧招聘信息 本文是关于招聘数据爬取,我们选取的网站是前程无忧. 百度直接搜索前程无忧,或者51job.我们将看到搜索栏,在搜索栏中输入"数据分析师"将可以看到工作信息. ...

  3. python爬虫找工作怎么找_python爬虫判断招聘信息是否存在的实例代码

    在找工作的时候,我们会选择上网查询招聘的信息,或者是通过一些招聘会进行现场面试.但由于信息更新不及时,有一些岗位会出现下架的情况,如果我们不注意的话,可能就扑了空.在时间上耽误了不说,面试的信息也会受 ...

  4. java爬虫之WebMagic实战抓取前程无忧招聘信息

    webmagic教程 http://webmagic.io/docs/zh/ 入门案例 package com.hikktn.webmagic;import us.codecraft.webmagic ...

  5. Python爬虫新手入门教学:爬取前程无忧招聘信息

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 基本开发环境 Python 3.6 Pycharm 相关模块的使用 requests parsel ...

  6. 数据采集:利用Scrapy采集前程无忧招聘信息

    需求分析: 1.采集目标网站:前程无忧 https://www.51job.com/ 2.可根据工作关键字采集不同的工作类别.如"工程师","教师" 3.采集字 ...

  7. 手把手教你使用Python网络爬虫获取招聘信息

    1.前言 现在在疫情阶段,想找一份不错的工作变得更为困难,很多人会选择去网上看招聘信息.可是招聘信息有一些是错综复杂的.而且不能把全部的信息全部罗列出来,以外卖的58招聘网站来看,资料整理的不清晰. ...

  8. requests+bs4+正则爬取前程无忧招聘信息进阶版

    整理思路 获取所有职位信息的url 通过正则去掉不符合要求的url 爬取详情页信息 解析详情页 写入txt文件 循环抓取 提高速度多线程爬取 先放上url:https://search.51job.c ...

  9. 前程无忧招聘信息可视化(python)

    一.爬虫 通过对比各个比较知名的招聘网站,发现有些网站反爬真的啥也爬不到,然后找到了前程无忧的手机端的网页. 分析网址(网址在爬虫代码中) 通过更新pageno的参数,进行分页爬取. 爬虫思路: 利用 ...

最新文章

  1. Linux内核网络协议栈
  2. JavaEE 资源注入
  3. python连不上树莓派_Python实现树莓派WiFi断线自动重连
  4. Android官方开发文档Training系列课程中文版:添加ActionBar之设置ActionBar
  5. python sqlite并发处理_python sqlite大数据 处理
  6. 通信原理实验c语言,基于LabVIEW软件的通信原理实验教学平台设计方案
  7. java设计一个user类_java – 如何使用两种不同类型的用户组织OO设计
  8. 微信公众账号调取用户昵称和用户头像
  9. 七年级计算机上册知识树,七年级上知识树.doc
  10. python图灵机器人微信号_IT之家学院:让你的微信号变成自动聊天机器人
  11. 11.Python初窥门径(函数名,可迭代对象,迭代器)
  12. 如何为物联网解决方案选择合适的物联网模块
  13. 蓝牙BQB认证所需资料和流程
  14. 城市区域二手房信息python爬取、保存和初步分析—笔记
  15. 【每天学点管理】——RACI责任制(快速解决责任分配问题)
  16. 天轰川 推荐的Javscript大收集 大集锦
  17. windows系统克隆虚拟机
  18. 浅析基于AI烟火识别的森林防火风险监测预警系统设计方案
  19. HarmonyOS系统中内核实现NFC无线通信的方法
  20. 【从本人QQ空间迁移】重构“依恋情结”(以黑名单的新增编辑为例)

热门文章

  1. android实现本地视频的播放,类似于一个小型的MP4,可以选择本地的文件进行播放
  2. wordpress主题php,wordpress主题怎么用
  3. Linux学习:Linux 文件与目录管理
  4. 符合新规的便携式明渠流量计比对装置(比对系统)
  5. 航班管家向怡宁:如何做APP界面设计
  6. 重庆冲加二氧化碳气体(建设4L钢瓶)在哪儿
  7. 天津农学院2022年高职升本科拟招生专业的通知
  8. 巨型计算机都很大吗,几种大型巨型机械设备,各个都是巨无霸!
  9. CAD看图软件如何画线?
  10. 测试管理的绩效管理启示