简介

在python爬虫之51job工作搜索我们只是通过python函数将其简单打印,在此我们将其进行封装成类,打印并写入mysql数据库中。
因此我们首先需要设计mysql的库和表结构,在此我们只用了简单的一个表,sql语句如下:

#建库
#create database 51job;
#建表
#create table job(job_id int not null auto_increment,keyword varchar(100) not null,position varchar(100) not null,p_link varchar(100) not null,company varchar(100) not null,location varchar(50) not null,salary varchar(20),publish varchar(40) not null,primary key (job_id));

在设计表之前曾想了很多,考虑到如果以后随着数据的增多,简单的一个表肯定会越来越慢,因此将其按城市、关键字、job信息等分表,有兴趣的可以仔细考虑下。目前我们就先按照一个表来运行。

安装

要点:
1.安装MySQLdb驱动
2.安装mysql数据库
3.安装selenium,beatifulsoup,phantomjs等python模块请参考之前的博文

程序代码

#!/usr/bin/env python2.7
#-*-  coding: utf-8 -*-
#date: 2016-09-06
#comment: 51job工作搜索并存入mysql数据库import sys
import time
import MySQLdb
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from bs4 import BeautifulSoupclass Job:'工作类'def __init__(self, position, p_link, company, location, salary, publish):self.position = positionself.p_link = p_linkself.company = companyself.location = locationself.salary = salaryself.publish = publishdef displayJob(self):print u"职位名:" + self.positionprint u"职位链接:" + self.p_linkprint u"公司名:" + self.companyprint u"公司地点:" + self.locationprint u"薪资:" + self.salaryprint u"发布时间:" + self.publishclass MySql:'数据库类'def __init__(self, host, user, password, port, db, charset='utf8'):self.host = hostself.user = userself.password = passwordself.port = portself.db = dbself.charset = charsetself.conn = MySQLdb.connect(host=self.host, user=self.user, passwd=self.password, port=self.port, db=self.db)   self.conn.set_character_set(self.charset)self.cursor = self.conn.cursor()#查询def queryDB(self, table_name, param):sql = 'select * from ' + table_name + " where keyword=%s and position=%s and p_link=%s and company=%s and location=%s and salary=%s and publish=%s;"self.cursor.execute(sql, param)def fetchRow(self):result = self.cursor.fetchone()return resultdef rowCount(self):self.cursor.rowcount#插入,插入前判断是否存在该条记录def insertDB(self, table_name, param):self.queryDB(table_name, param)count = self.fetchRow()if count == None:sql = "insert into " + table_name + "(keyword, position, p_link, company, location, salary, publish) values(%s, %s, %s, %s, %s, %s, %s);"self.cursor.execute(sql, param)def commitDB(self):self.conn.commit()def closeDB(self):self.cursor.close()self.conn.close()class SearchJob:'搜索类'def __init__(self, url, keys, driver):self.url = urlself.keys = keysdef open51job(self):driver.get(url)print u"进入...." + driver.title#默认搜索框elem = driver.find_element_by_class_name("textbox1")elem.clear()elem.send_keys(keys)elem.submit()#关闭当前tab页driver.close()#切换到下一tab页for handle in driver.window_handles:driver.switch_to_window(handle)print u"进入...." + driver.titletime.sleep(2)#搜索当前页工作信息def searchJob(self):data = driver.page_sourcecontent = BeautifulSoup(data, "lxml")return content#切换到下一页def nextPage(self):try:page_num = driver.find_element_by_link_text("下一页")page_num.click()except NoSuchElementException:print u"搜索完毕"flag = 0return flagdef closeWeb(self):driver.close()if __name__ == "__main__":#编码需要reload(sys)                      sys.setdefaultencoding('utf-8')url = "http://www.51job.com/qingdao"keys = raw_input("请输入搜索关键词:").decode(sys.stdin.encoding)print "请稍等片刻...."driver = webdriver.PhantomJS(executable_path="/usr/local/phantomjs/bin/phantomjs")searchtask = SearchJob(url, keys, driver)searchtask.open51job()num = 1while True:print u"##################################第" + str(num) + u"页工作信息如下#####################"content = searchtask.searchJob()position = content.find_all("p", {"class":"t1"})company = content.find_all("span", {"class":"t2"})location = content.find_all("span", {"class":"t3"})salary = content.find_all("span", {"class":"t4"})publish = content.find_all("span", {"class":"t5"})i = 1for each in position:print "####第" + str(i) + "个job####"if salary[i].string == None:salary[i].string = u"0/月" #job类实例化job = Job(each.a.get("title"), each.a.get("href"), company[i].string, location[i].string, salary[i].string, publish[i].string)#数据库操作mysql = MySql('127.0.0.1', 'root', '', 3306, '51job')param = (keys, job.position, job.p_link, job.company, job.location, job.salary, job.publish)mysql.insertDB("job", param)mysql.commitDB()mysql.closeDB()job.displayJob()i = i + 1flag = searchtask.nextPage()if flag == 0:breaknum = num + 1searchtask.closeWeb()

代码要点:
1.sql语句插入中文时,需要是使用utf8
reload(sys)
sys.setdefaultencoding(‘utf-8’)
及在定义类的时指定utf8
def init(self, host, user, password, port, db, charset=’utf8’):

2.job信息重复
sql插入前,需要判断按照关键字、职位、公司及发布时间等信息判断此条记录是否存在,当不存在时才插入

查看数据库

mysql> select * from job limit 10;
+--------+-----------+-------------------------------------------------------------------------+-----------------------------------------------------+--------------------------------------------------+------------------+----------------+---------+
| job_id | keyword   | position                                                                | p_link                                              | company                                          | location         | salary         | publish |
+--------+-----------+-------------------------------------------------------------------------+-----------------------------------------------------+--------------------------------------------------+------------------+----------------+---------+
|      2 | 韩国语    | 韩国语外教(工作地点:中国山东省青岛市)                                | http://jobs.51job.com/qingdao-snq/76738306.html?s=0 | 青岛亚联教育咨询管理有限公司                     | 青岛-市南区      | 60元/小时      | 09-06   |
|      3 | 韩国语    | 文案编辑(韩国语)                                                       | http://jobs.51job.com/qingdao-cyq/77621062.html?s=0 | 青岛倡仪医疗器有限公司                           | 青岛-城阳区      | 3000-4499/月   | 09-06   |
|      4 | 韩国语    | 朝鲜语/韩国语                                                           | http://jobs.51job.com/qingdao-lcq/78931983.html?s=0 | 青岛大星电子有限公司                             | 青岛-李沧区      | 3500-5000/月   | 09-06   |
|      5 | 韩国语    | 韩国语翻译                                                              | http://jobs.51job.com/qingdao-snq/80744014.html?s=0 | 赢联科技集团有限公司                             | 青岛-市南区      | 3000-4499/月   | 09-06   |
|      6 | 韩国语    | 韩国语翻译                                                              | http://jobs.51job.com/qingdao-jms/52580378.html?s=0 | 青岛东一胶带有限公司                             | 青岛-即墨市      | 3000-5000/月   | 09-04   |
|      7 | 韩国语    | 韩国语相关                                                              | http://jobs.51job.com/qingdao-lcq/71126401.html?s=0 | 青岛杰亚希教育咨询有限公司                       | 青岛-李沧区      | 3000-4499/月   | 08-30   |
|      8 | 韩国语    | 汽车零部件项目管理                                                      | http://jobs.51job.com/qingdao-pds/80814703.html?s=0 | 青岛东明汽车配件有限公司                         | 青岛-平度市      | 6000-7999/月   | 09-06   |
|      9 | 韩国语    | 全&***韩语老师(外企模式-待遇福利升职等制度完善)                       | http://jobs.51job.com/qingdao/79670539.html?s=0     | 青岛锦才教育                                     | 青岛             | 4500-5999/月   | 09-06   |
|     10 | 韩国语    | 日本免税店/奢侈品/店员/翻译担当15-20万                                  | http://jobs.51job.com/qingdao/74415559.html?s=0     | 青岛知行国际经济技术合作有限公司                 | 青岛             | 15-20万/年     | 09-06   |
|     11 | 韩国语    | 韩译英翻译员                                                            | http://jobs.51job.com/qingdao/66920356.html?s=0     | 成都朗恒智讯科技有限公司                         | 青岛             | 5000-10000/月  | 09-06   |
+--------+-----------+-------------------------------------------------------------------------+-----------------------------------------------------+--------------------------------------------------+------------------+----------------+---------+
10 rows in set (0.00 sec)

python爬虫之搜索51job并存入mysql数据库相关推荐

  1. Python 爬虫基础: 如何将数据存入Mysql数据库

    使用爬虫爬数据,总要涉及到数据持久化,也就是数据存储的问题. 我们可以根据具体情况把数据保存在本地 txt 文件里,excel 里,csv 里等等,当然也可以存储在数据库里. 本篇博客主要记录如何通过 ...

  2. python爬虫开发数据库设计入门经典_Python3实现的爬虫爬取数据并存入mysql数据库操作示例...

    本文实例讲述了Python3实现的爬虫爬取数据并存入mysql数据库操作.分享给大家供大家参考,具体如下: 爬一个电脑客户端的订单.罗总推荐,抓包工具用的是HttpAnalyzerStdV7,与chr ...

  3. 借助python用Tushare查询股票价格并存入Mysql数据库中

    Tushare是一非常好用的数据接口,金融数据包含广,便利而实用. 本文主要介绍如何通过Tushare的pro接口查询股票数据,并且保存到数据库Mysql中. 首先是安装工具包 import tush ...

  4. python爬虫 django搜索修改更新数据_django_数据库操作—增、删、改、查

    增加 增加数据有两种方法 1> sava >>> from datetime import date >>> book = BookInfo( btitle= ...

  5. python爬取 xueqiu网 数据 存入MySQL数据库中

    #导入包 from urllib import request import json import pymysql #声名一个class类 class mysql_connect(object):# ...

  6. 用 Python selenium爬取股票新闻并存入mysql数据库中带翻页功能demo可下载

    用 Python selenium爬取实时股票新闻并存入mysql数据库中 1.分析需求 2.创建表 3.分析需要爬取的网页内容 4.python里面selenium进行爬虫操作 1.添加包 2.连接 ...

  7. python爬虫:爬取动态网页并将信息存入MySQL数据库

    目标网站 http://www.neeq.com.cn/disclosure/supervise.html 爬取网页该部分内容 网页分析 查看网页源代码发现没有表格部分内容,对网页请求进行分析 F12 ...

  8. scrapy爬虫数据存入mysql数据库

    上篇博客使用scrapy框架爬取豆瓣电影top250信息将各种信息通过json存在文件中,不过对数据的进一步使用显然放在数据库中更加方便,这里将数据存入mysql数据库以便以后利用. 运行环境: 1. ...

  9. python爬取新闻存入数据库_python 爬取古诗文存入mysql数据库的方法

    使用正则提取数据,请求库requests,看代码,在存入数据库时,报错ERROR 1054 (42S22): Unknown column 'title' in 'field list'.原来是我写s ...

最新文章

  1. 使用LinkedList模拟一个堆栈或者队列数据结构
  2. ucenter词语过滤原理
  3. 关于日期单双日,星期判断
  4. 掌握企业邮箱3个好用的技巧,商务沟通安全又轻松!
  5. IceWarp邮件监控功能
  6. 【高并发高性能高可用之海量数据MySQL实战-3】-MySQL逻辑架构图
  7. python在线 培训
  8. SpringBoot中集成Redis实现对redis中数据的解析和存储
  9. 科大讯飞麦克风阵列回声消除须知 V1.0
  10. 敏捷转型行动笔记:内部敏捷教练实践
  11. 慧算账安利创业者如何选择代理记账公司
  12. 学计算机专业 要画素描吗,我是计算机专业的学生,想自学素描!!!
  13. mysql怎么定位cpu高_Mysql数据库服务器CPU冲高问题定位及分析
  14. PageAdmin CMS建站系统可视化区块的使用教程
  15. 【庖丁解牛】从零实现FCOS(二):ground truth分配与loss计算
  16. windows 7 x64 下的 System Call
  17. 获取最近未来法定节假日的日期
  18. 学习学习再学习-作者:李笑来
  19. Qt 集成miniblink浏览器库之4 解决兼容性问题
  20. 从零开始语音识别(5)--- 端到端的语音识别系统

热门文章

  1. 17、python数据列之间的简单计算(加减乘除)
  2. gsm模块网站服务器,GPRS模块与GSM模块的七大区别
  3. ImageFeatures
  4. LOCAL_PRIVILEGED_MODULE 详解(2)
  5. 自制力对人生的实际价值探索
  6. 快速查找计算9百万万亿整数内全部素数(质数)的C++代码
  7. 第十四课、语句及数据结构应用
  8. Java使用freemarker导出word试卷
  9. 汽车金融的上半年:易鑫巨亏超10亿 灿谷逾期率同比大幅飙升
  10. 关于WinGate代理服务器的概述