[python爬虫] 招聘信息定时系统 (一).BeautifulSoup爬取信息并存储MySQL
这系列文章主要讲述,如何通过Python爬取招聘信息,且爬取的日期为当前天的,同时将爬取的内容保存到数据库中,然后制作定时系统每天执行爬取,最后是Python调用相关库发送短信到手机。
最近研究了数据库的定时计划备份,联系爬虫简单做了这个实验,虽然方法是基于单机,比较落后,但可行,创新也比较好。整个系列主要分为五部分,共五篇文章:
1.Python爬取招聘信息,并且存储到MySQL数据库中;
2.调用pyinstaller包将py文件打包成exe可执行文件;
3.设置Windows系统的计划,制作定时任务,每天早上定时执行exe爬虫;
4.结合PHP(因毕业设计指导学生的是PHP系统)简单实现前端招聘信息界面;
5.补充知识:Python调用短信猫发送招聘短信到客户手机,研究ing。
文章比较基础好玩,希望对您有所帮助,如果文章中存在错误或不足之处。
一. 运行结果
爬取地址为智联招聘网站:http://sou.zhaopin.com/
![](/assets/blank.gif)
爬取结果存储至MySQL数据库如下图所示,注意只有4月22日的信息。
![](/assets/blank.gif)
运行结果及保存TXT文件如下所示:
![](/assets/blank.gif)
二. BeautifulSoup爬虫详解
完整代码如下所示:
# -*- coding: utf-8 -*-
"""
Created on 2017-04-22 15:10@author: Easstmount
"""import urllib2
import re
from bs4 import BeautifulSoup
import codecs
import MySQLdb
import os#存储数据库
#参数:职位名称 公司名称 职位月薪 工作地点 发布时间 职位链接
def DatabaseInfo(zwmc, gsmc, zwyx, gzdd, gxsj, zwlj): try: conn = MySQLdb.connect(host='localhost',user='root',passwd='123456',port=3306, db='eastmount') cur=conn.cursor() #数据库游标 #报错:UnicodeEncodeError: 'latin-1' codec can't encode character conn.set_character_set('utf8') cur.execute('SET NAMES utf8;') cur.execute('SET CHARACTER SET utf8;') cur.execute('SET character_set_connection=utf8;')#SQL语句 智联招聘(zlzp)sql = '''insert into eastmount_zlzp (zwmc,gsmc,zwyx,gzdd,gxsj,zwlj) values(%s, %s, %s, %s, %s, %s)'''cur.execute(sql, (zwmc, gsmc, zwyx, gzdd, gxsj, zwlj))print '数据库插入成功' #异常处理 except MySQLdb.Error,e: print "Mysql Error %d: %s" % (e.args[0], e.args[1]) finally: cur.close() conn.commit() conn.close() #爬虫函数
def crawl(url):page = urllib2.urlopen(url) contents = page.read() soup = BeautifulSoup(contents, "html.parser") print u'贵阳JAVA招聘信息: 职位名称 \t 公司名称 \t 职位月薪 \t 工作地点 \t 发布日期 \n'infofile.write(u"贵阳JAVA招聘信息: 职位名称 \t 公司名称 \t 职位月薪 \t 工作地点 \t 发布日期 \r\n")print u'爬取信息如下:\n'i = 0for tag in soup.find_all(attrs={"class":"newlist"}):#print tag.get_text()i = i + 1#职位名称zwmc = tag.find(attrs={"class":"zwmc"}).get_text()zwmc = zwmc.replace('\n','')print zwmc#职位链接url_info = tag.find(attrs={"class":"zwmc"}).find_all("a")#print url_info#url_info.get(href) AttributeError: 'ResultSet' object has no attribute 'get' for u in url_info:zwlj = u.get('href')print zwlj#公司名称gsmc = tag.find(attrs={"class":"gsmc"}).get_text()gsmc = gsmc.replace('\n','')print gsmc#find另一种定位方法 <td class="zwyx">8000-16000</td>zz = tag.find_all('td', {"class":"zwyx"})print zz#职位月薪zwyx = tag.find(attrs={"class":"zwyx"}).get_text()zwyx = zwyx.replace('\n','')print zwyx#工作地点gzdd = tag.find(attrs={"class":"gzdd"}).get_text()gzdd = gzdd.replace('\n','')print gzdd#发布时间gxsj = tag.find(attrs={"class":"gxsj"}).get_text()gxsj = gxsj.replace('\n','')print gxsj#获取当前日期并判断写入文件import datetimenow_time = datetime.datetime.now().strftime('%m-%d') #%Y-%m-%d#print now_timeif now_time==gxsj:print u'存入文件'infofile.write(u"[职位名称]" + zwmc + "\r\n")infofile.write(u"[公司名称]" + gsmc + "\r\n")infofile.write(u"[职位月薪]" + zwyx + "\r\n")infofile.write(u"[工作地点]" + gzdd + "\r\n")infofile.write(u"[发布时间]" + gxsj + "\r\n")infofile.write(u"[职位链接]" + zwlj + "\r\n\r\n") else:print u'日期不一致,当前日期: ', now_time###################################### 重点:写入MySQL数据库#####################################if now_time==gxsj:print u'存入数据库'DatabaseInfo(zwmc, gsmc, zwyx, gzdd, gxsj, zwlj)print '\n\n'else:print u'爬取职位总数', i#主函数
if __name__ == '__main__':infofile = codecs.open("Result_ZP.txt", 'a', 'utf-8') #翻页执行crawl(url)爬虫i = 1 while i<=2: print u'页码', iurl = 'http://sou.zhaopin.com/jobs/searchresult.ashx?in=160400&jl=%E8%B4%B5%E9%98%B3&kw=java&p=' + str(i) + '&isadv=0' crawl(url) infofile.write("###########################\r\n\r\n\r\n") i = i + 1infofile.close()
安装Beautifulsoup如下图所示,使用pip install bs4即可。
![](/assets/blank.gif)
重点是分析智联招聘的DOM树结构。
1.分析URL
URL为:http://sou.zhaopin.com/jobs/searchresult.ashx?in=160400&jl=%E8%B4%B5%E9%98%B3&kw=java&p=2&isadv=0
其中,"in=160400" 表示 "行业类别" 选择"计算机软件"(可以多选);"jl=贵阳" 表示工作地点选择贵阳市;"kw=java" 表示职位选择Java相关专业;"p=2" 表示页码,main函数通过循环分析爬取。
![](/assets/blank.gif)
2.分析DOM树节点
然后浏览器右键审查元素,可以看到每行职位信息都是在HTML中都是一个<table></table>,其中class为newlist。
核心代码:for tag in soup.find_all(attrs={"class":"newlist"}):
定位该节点后再分别爬取内容,并赋值给变量,存储到MySQL数据库中。
![](/assets/blank.gif)
3.具体内容分析
获取职位名称代码如下:
zwmc = tag.find(attrs={"class":"zwmc"}).get_text()
print zwmc
另一段代码,会输出节点信息,如:
zz = tag.find_all('td', {"class":"zwyx"})
print zz
#<td class="zwyx">8000-16000</td>
对应的HTML DOM树分析如下图所示。
![](/assets/blank.gif)
4.判断为当前日期则保存到TXT和MySQL中,这是为了后面方便,每天爬取最新的信息并周期执行,然后发送短信给手机。我也是佩服自己的大脑,哈哈~
参考前文,并推荐官网。
Python爬虫之Selenium+BeautifulSoup+Phantomjs专栏
[python知识] 爬虫知识之BeautifulSoup库安装及简单介绍
[python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息
三. 数据库操作
SQL语句创建表代码如下:
CREATE TABLE `eastmount_zlzp` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `zwmc` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '职位名称', `gsmc` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '公司名称', `zwyx` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '职位月薪', `gzdd` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '工作地点', `gxsj` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '发布时间',`zwlj` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '职位链接',`info` varchar(200) COLLATE utf8_bin DEFAULT NULL COMMENT '详情', PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
显示如下图所示:
![](/assets/blank.gif)
其中,Python调用MySQL推荐下面这篇文字。
[python] 专题九.Mysql数据库编程基础知识
核心代码如下所示:
# coding:utf-8
import MySQLdbtry:conn=MySQLdb.connect(host='localhost',user='root',passwd='123456',port=3306, db='test01')cur=conn.cursor()#插入数据sql = '''insert into student values(%s, %s, %s)'''cur.execute(sql, ('yxz','111111', '10'))#查看数据print u'\n插入数据:'cur.execute('select * from student')for data in cur.fetchall():print '%s %s %s' % datacur.close()conn.commit()conn.close()
except MySQLdb.Error,e:print "Mysql Error %d: %s" % (e.args[0], e.args[1])
后面还将继续探寻、继续写文,写完这种单击版的定时发送功能,后面研究Python服务器的相关功能。最后希望文章对你有所帮助,如果文章中存在错误或不足之处,还请海涵~
太忙了,但是年轻人忙才好,多经历多磨砺多感悟;想想自己都是下班在学习,配女神的时候学习,真的有个好贤内助。胡子来省考,晚上陪他们吃个饭。感觉人生真的很奇妙,昨天加完班走了很远给女神一个91礼物和一个拼图,感觉挺开心的。生活、教学、编程、爱情,最后献上一首最近写的诗,每句都是近期一个故事。
风雪交加雨婆娑,
琴瑟和鸣泪斑驳。
披星戴月辗转梦,
娜璋白首爱连绵。
同时准备写本python书给我的女神,一直没定下来,唯一要求就是她的署名及支持。
(By:Eastmount 2017-04-22 下午4点 http://blog.csdn.net/eastmount/ )
[python爬虫] 招聘信息定时系统 (一).BeautifulSoup爬取信息并存储MySQL相关推荐
- python 爬虫(一) requests+BeautifulSoup 爬取简单网页图片代码示例
最近学习了Python,借助各个大神的文章,自己写了以下代码,来爬取网页图片,希望可以帮助到大家. 工具是 idea #coding=utf-8 import requests from bs4 im ...
- Python爬虫之利用requests,BeautifulSoup爬取小说标题、章节
爬取雪鹰领主标题和章节内容为列: 查看网页的源代码,如下图所示: 获取html内容部分 import requests headers = {'User-Agent': 'Mozilla/5.0 ( ...
- python 爬虫(一) requests+BeautifulSoup 爬取简单网页代码示例
以前搞偷偷摸摸的事,不对,是搞爬虫都是用urllib,不过真的是很麻烦,下面就使用requests + BeautifulSoup 爬爬简单的网页. 详细介绍都在代码中注释了,大家可以参阅. # -* ...
- Python 爬虫 之 Selenium 模拟打开操作浏览器爬取斗鱼全部视播相关信息,并json保存信息
Python 爬虫 之 Selenium 模拟打开操作浏览器爬取斗鱼全部视播相关信息,并json保存信息 基础: Python 爬虫 之 Selenium.webdriver 的安装,以及模拟打开操作 ...
- python爬虫多久能学会-不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据...
原标题:不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据 Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方 ...
- python爬虫入门实战---------一周天气预报爬取_Python爬虫入门实战--------一周天气预报爬取【转载】【没有分析...
Python爬虫入门实战--------一周天气预报爬取[转载][没有分析 Python爬虫入门实战--------一周天气预报爬取[转载][没有分析] 来源:https://blog.csdn.ne ...
- Python爬虫《自动化学报》数据爬取与数据分析
Python爬虫<自动化学报>数据爬取与数据分析 文章目录 Python爬虫<自动化学报>数据爬取与数据分析 前言 一.代码 二.结果展示 三.爬虫实现 1.准备 2.获取网页 ...
- Python爬虫系列(二):爬取中国大学排名丁香园-用户名和回复内容淘宝品比价
Python爬虫系列(二):爬取中国大学排名&丁香园-用户名和回复内容&淘宝品比价 目录 Python爬虫系列(二):爬取中国大学排名&丁香园-用户名和回复内容&淘宝品 ...
- 基于python爬虫————静态页面和动态页面爬取
基于python爬虫----静态页面和动态页面爬取 文章目录 基于python爬虫----静态页面和动态页面爬取 1. 爬虫的原理 2. 用正则表达式匹配获取数据 3. 页面源码解析 4. 通过req ...
最新文章
- 【Leetcode】100. 相同的树
- linux系统中的文件传输
- C/C++ 语言中表达式的求值
- redis session共享中的序列化问题
- swagger3 设置值可以为空_【Swagger2】【3】API注解详解,以及注解常用参数配置
- sqlite 数据类型 全面
- C++ operator操作符重载(++,--,-,+,())
- C:C++ 函数返回多个参数
- jQuery和react实现二维码
- Spring Security Ajax 被拦截
- 一不小心就对未分配的内存进行访问和修改
- Kafka 学习笔记(二) :初探 Kafka
- acegis连接使用方法_arcgis工具使用方法
- 我自己在学arm7——ourdev
- CAPM模型应用策略
- Python3---最新版本3.10.4安装教程
- tomcat启动后出现乱码解决
- chromium 43 如何增加后台运行的插件 关闭浏览器到系统托盘
- GET和POST两种基本请求方法的区别 1
- 四阶行列式直接展开_四阶行列式_4阶行列式详细解题步骤
热门文章
- Oracle之AUTHID CURRENT_USER
- Oracle Recyclebin
- HDU.5909.Tree Cutting(树形DP FWT/点分治)
- 10如何成为卓越领导者摘录——卓越的领导者
- MySQL配置(二)
- 题解报告:hdu 1257 最少拦截系统(贪心)
- 《人件集 人性化的软件开发》阅读笔记01
- asp.net导出excel-一行代码实现excel、xml、pdf、word、html、csv等7种格式文件导出功能而且美观-SNF快速开发平台...
- TWebBrowser的基本应用
- cxgrid按条件计算合计值