爬虫起因

  前面两个星期,利用周末的时间尝试和了解了一下Python爬虫,紧接着就开始用Scrapy框架做了一些小的爬虫,不过,由于最近一段时间的迷茫,和处于对职业生涯的规划。以及对市场需求的分析,我通过网上查阅资料。对比较大的前程无忧和智联招聘进行了数据爬取。
  这里我们以智联招聘为例做一些讲解。

前期准备

首先我在我自己做爬虫之前就已经规划好了我需要爬取什么数据,并且创建了数据库表,并提前对网页内容有大概的了解。其次处于对数据分析的考虑,我对我比较关系的字段例如,经验,学历,薪资等都要求尽量能够爬取到。最后,通过书本以及网络资源等各种工具了解Scrapy,正则表达式,Xpath,BeautifulSoup等各种知识,为后面做好爬虫打下了基础。

实战

在本次小练习中,我们主要会用到,piplines,items,和我们自己新建的Spider类,
items是针对实体的,与数据库表中最好具有对应关系,代码如下:

import scrapy
class ZhaopinItem(scrapy.Item):jobname = scrapy.Field()salary = scrapy.Field()experience = scrapy.Field()address = scrapy.Field()comany_name = scrapy.Field()head_count = scrapy.Field()education_require = scrapy.Field()comany_size = scrapy.Field()job_require =scrapy.Field()release_date = scrapy.Field()

piplines在本例中主要是对items进行数据操作的。代码如下:

import pymysql
from zhaopin import settingsclass ZhaopinPipeline(object):def __init__(self, ):self.conn = pymysql.connect(host=settings.MYSQL_HOST,db=settings.MYSQL_DBNAME,user=settings.MYSQL_USER,passwd=settings.MYSQL_PASSWORD,charset='utf8',  # 编码要加上,否则可能出现中文乱码问题use_unicode=False)self.cursor = self.conn.cursor()def process_item(self, item, spider):self.insertData(item)return itemdef insertData(self, item):sql = "insert into shenzhen(jobname,salary,company_name,job_require,address,experience,company_size,head_count,education_require,release_date) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);"params = (item['jobname'],item['salary'],item['comany_name'],item['job_require'],item['address'],item['experience'],item['comany_size'],item['head_count'],item['education_require'],item['release_date'])self.cursor.execute(sql, params)self.conn.commit()

最后最为主要的是,数据的获取以及解析,代码如下。

from zhaopin.items import ZhaopinItem
from scrapy import Spider,Request
from bs4 import BeautifulSoup
import  re
class ZhaopinSpider(Spider):name = 'zhaopin'allowed_domains = ['www.zhaopin.com']start_urls = ['http://www.zhaopin.com/']#start_urls = ['http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E4%B8%8A%E6%B5%B7&kw=java%E5%B7%A5%E7%A8%8B%E5%B8%88&sm=0&sg=720f662a0e894031b9b072246ac2f919&p=1']def start_requests(self):#for num in (1,60):url='http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E6%B7%B1%E5%9C%B3&kw=java%E5%B7%A5%E7%A8%8B%E5%B8%88&sm=0&isadv=0&sg=cc9fe709f8cc4139afe2ad0808eb7983&p=42'#.format(num)#yield Request(url,callback=self.parse)yield Request(url,callback=self.parse)def parse(self, response):#self.log('page url is ' + response.url)wbdata = response.textsoup = BeautifulSoup(wbdata, 'lxml')job_name = soup.select("table.newlist > tr > td.zwmc > div > a:nth-of-type(1)")salary = soup.select("table.newlist > tr > td.zwyx")#company_name = soup.select("table.newlist > tr > td.gsmc > div > a:nth-of-type(2)")times = soup.select("table.newlist > tr > td.gxsj > span")for name,salary,time in zip(job_name,salary,times):item = ZhaopinItem()item["jobname"] = name.get_text()url= name.get('href')#print("职位"+name.get_text()+"工资"+salary.get_text()+"发布日期"+time.get_text()+"连接"+url)item["salary"] = salary.get_text()item["release_date"] = time.get_text()# item["comany_name"] = company     _name.get_text()#yield itemyield Request(url=url, meta={"item": item}, callback=self.parse_moive,dont_filter=True)def parse_moive(self, response):#item = ZhaopinItem()jobdata = response.bodyrequire_data = response.xpath('//body/div[@class="terminalpage clearfix"]/div[@class="terminalpage-left"]/div[@class="terminalpage-main clearfix"]/div[@class="tab-cont-box"]/div[1]/p').extract()require_data_middle = ''for i in require_data:i_middle = re.sub(r'<.*?>', r'', i, re.S)require_data_middle = require_data_middle + re.sub(r'\s*', r'', i_middle, re.S)jobsoup = BeautifulSoup(jobdata, 'lxml')item = response.meta['item']item['job_require'] = require_data_middleitem['experience'] = jobsoup.select('div.terminalpage-left strong')[4].text.strip()item['comany_name']  = jobsoup.select('div.fixed-inner-box h2')[0].textitem['comany_size']  = jobsoup.select('ul.terminal-ul.clearfix li strong')[8].text.strip()item['head_count']  = jobsoup.select('div.terminalpage-left strong')[6].text.strip()item['address'] = jobsoup.select('ul.terminal-ul.clearfix li strong')[11].text.strip()item['education_require'] = jobsoup.select('div.terminalpage-left strong')[5].text.strip()yield item

当然最后还需要对一些基础的配置在setting文件中进行设置,如下

ROBOTSTXT_OBEY = FalseITEM_PIPELINES = {'zhaopin.pipelines.ZhaopinPipeline':300
}MYSQL_HOST = '127.0.0.1'
MYSQL_DBNAME = 'zhaopin'     # 数据库名
MYSQL_USER = 'root'         # 数据库用户
MYSQL_PASSWORD = '123456'   # 数据库密码

最后,运行成功会获得如下结果:

后记

后面如果我开发了数据分析相关的技能包,可能还会对这里的数据进行分析,到时候会将分析的一些有趣的东西分析出来,

代码请戳这里

Python利用Scrapy爬取智联招聘和前程无忧的招聘数据相关推荐

  1. scrapy 智联 mysql_Python利用Scrapy爬取智联招聘和前程无忧的招聘数据

    爬虫起因 前面两个星期,利用周末的时间尝试和了解了一下Python爬虫,紧接着就开始用Scrapy框架做了一些小的爬虫,不过,由于最近一段时间的迷茫,和处于对职业生涯的规划.以及对市场需求的分析,我通 ...

  2. Python利用Scrapy爬取前程无忧

    ** Python利用Scrapy爬取前程无忧 ** 一.爬虫准备 Python:3.x Scrapy PyCharm 二.爬取目标 爬取前程无忧的职位信息,此案例以Python为关键词爬取相应的职位 ...

  3. scrapy爬取智联招聘

    我想分析下互联网行业全国招聘实习生的情况,通过爬取智联招聘,得到15467条数据,并导入Mysql 在items.py里: import scrapy from scrapy.http import ...

  4. (转)python爬虫实例——爬取智联招聘信息

    受友人所托,写了一个爬取智联招聘信息的爬虫,与大家分享. 本文将介绍如何实现该爬虫. 目录 网页分析 实现代码分析 结果 总结 github代码地址 网页分析 以https://xiaoyuan.zh ...

  5. python爬虫实例——爬取智联招聘信息

    受友人所托,写了一个爬取智联招聘信息的爬虫,与大家分享. 本文将介绍如何实现该爬虫. 目录 网页分析 实现代码分析 结果 总结 github代码地址 网页分析 以https://xiaoyuan.zh ...

  6. python scrapy爬取智联招聘的公司和职位信息(一)

    这个帖子先暂时放弃.本以为和拉钩一样全是静态页面,结果在写item的时候,发现网页有点意思,突然有个大胆的想法,想试试-先埋坑,后面在填坑 缘由: 最近在找工作发现智联和51上太多培训机构的虚假招聘信 ...

  7. python3 scrapy爬取智联招聘存mongodb

    写在前面,这次写智联招聘的爬虫是其次,主要的是通过智联招聘上的数据信息弄一个数据挖掘的小项目,这一篇主要是如何一气呵成的将智联招聘上的招聘信息给爬下来 (一)scrapy框架的使用 scrapy框架是 ...

  8. Python网络爬虫爬取智联招聘职位

    观察网站结构. 打开智联招聘网页,搜索数据分析师,出来很多招聘岗位,限定全国范围,从下图看出有12354个职位,一共有90页,看最后一页职位已经只是和数据分析师相关而已. 看看最后一页搜索结果 PS: ...

  9. scrapy爬取智联招聘,MongoDB存储数据

    一.项目目录结构 二.模块划分 1.settings # -*- coding: utf-8 -*-# Scrapy settings for zhilian project # # For simp ...

最新文章

  1. 谁扛起张一鸣的游戏野心?
  2. 医学论文论题该如何下手
  3. hana::detail::variadic::foldl1用法的测试程序
  4. PyTorch深度学习实践
  5. Android中SQLiteDatabase操作【附源码】
  6. Matplotlib - 散点图 scatter() 所有用法详解
  7. c# combobox集合数据不显示_excel打开数据时显示乱码/问号amp;看起来一样却v不出来怎么办...
  8. 集合框架及背后的数据结构、Collection,Map、ArrayList的使用
  9. 【mongodb系统学习之十】mongodb查询(二)
  10. java面向对象怎么学_Java面向对象入门
  11. 前W3C顾问Klaus Birkenbihl谈HTML5与万维网未来
  12. 组件源码——拖动条Slider
  13. 电脑显卡驱动,怎么安装电脑显卡驱动?正确方法在这里!
  14. 基于Fisher准则线性分类器设计
  15. python深度学习 共享 弗朗索瓦•肖莱(François Chollet)
  16. 每日技巧分享:怎么裁剪音频,快学习起来
  17. /NXCOMPAT编译选项 : 数据执行保护DEP
  18. 爬取中国所有银行官网网址信息
  19. CASS中基于高程点并生成等高线的方法
  20. CSS画矩形、圆、半圆、弧形、半圆、小三角、疑问框

热门文章

  1. OneNote for Windows 10 笔记的导出
  2. JAVA API1.8中文版 谷歌翻译 最准确最全的翻译版本!蓝奏下载
  3. 回归(regression)
  4. matlab线性回归程序,MATLAB 线性回归
  5. 后台开发与APP配合开发中的一些拙见
  6. 贵州支教之第一天(11月7日)
  7. 基于MATLAB的无刷直流调速系统的设计与仿真
  8. 微软和谷歌又要“打”起来了!网友:太好了
  9. 计算机专业屏幕尺寸,电脑屏幕尺寸怎么看
  10. centos连不上网的解决办法: