前言

本次主题分两篇文章来介绍:

  • 一、数据采集
  • 二、数据分析

第一篇先来介绍数据采集,即用python爬取网站数据。

1 运行环境和python库

先说下运行环境:

  • python3.5
  • windows 7, 64位系统

python库

本次智联招聘的网站爬取,主要涉及以下一些python库:

  • requests
  • BeautifulSoup
  • multiprocessing
  • pymongo
  • itertools

2 爬取的主要步骤

  • 根据关键字、城市、以及页面编号生成需要爬取的网页链接
  • 用requests获取相应的网页内容
  • 用BeautifulSoup解析,获取需要的关键信息
  • 将爬取的信息存入MongoDB数据库中,插入新记录或更新已有记录
  • 用multiprocessing启动多进程进行爬取,提高运行效率

3 文件组成

  • 信息配置文件“zhilian_kw_config.py”
  • 爬虫主运行文件“zhilian_kw_spider.py”

在配置文件中设置需要爬取的信息,然后运行主程序进行内容抓取。

配置文件“zhilian_kw_config.py”的内容如下:

# Code based on Python 3.x
# _*_ coding: utf-8 _*_
# __Author: "LEMON" TOTAL_PAGE_NUMBER = 90 # PAGE_NUMBER: total number of pages,可进行修改 KEYWORDS = ['大数据', 'python', '投资经理'] # 需爬取的关键字可以自己添加或修改 # 爬取主要城市的记录
ADDRESS = ['全国', '北京', '上海', '广州', '深圳',
'天津', '武汉', '西安', '成都', '大连',
'长春', '沈阳', '南京', '济南', '青岛',
'杭州', '苏州', '无锡', '宁波', '重庆',
'郑州', '长沙', '福州', '厦门', '哈尔滨',
'石家庄', '合肥', '惠州', '太原', '昆明',
'烟台', '佛山', '南昌', '贵阳', '南宁'] MONGO_URI = 'localhost'
MONGO_DB = 'zhilian'

爬虫主运行文件“zhilian_kw_spider.py”的内容如下:

# Code based on Python 3.x
# _*_ coding: utf-8 _*_
# __Author: "LEMON" from datetime import datetime
from urllib.parse import urlencode
from multiprocessing import Pool
import requests
from bs4 import BeautifulSoup
import pymongo
from zhilian.zhilian_kw_config import *
import time
from itertools import product client = pymongo.MongoClient(MONGO_URI)
db = client[MONGO_DB] def download(url):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0'}
response = requests.get(url, headers=headers)
return response.text def get_content(html):
# 记录保存日期
date = datetime.now().date()
date = datetime.strftime(date, '%Y-%m-%d') # 转变成str soup = BeautifulSoup(html, 'lxml')
body = soup.body
data_main = body.find('div', {'class': 'newlist_list_content'}) if data_main:
tables = data_main.find_all('table') for i, table_info in enumerate(tables):
if i == 0:
continue
tds = table_info.find('tr').find_all('td')
zwmc = tds[0].find('a').get_text() # 职位名称
zw_link = tds[0].find('a').get('href') # 职位链接
fkl = tds[1].find('span').get_text() # 反馈率
gsmc = tds[2].find('a').get_text() # 公司名称
zwyx = tds[3].get_text() # 职位月薪
gzdd = tds[4].get_text() # 工作地点
gbsj = tds[5].find('span').get_text() # 发布日期 tr_brief = table_info.find('tr', {'class': 'newlist_tr_detail'})
# 招聘简介
brief = tr_brief.find('li', {'class': 'newlist_deatil_last'}).get_text() # 用生成器获取信息
yield {'zwmc': zwmc, # 职位名称
'fkl': fkl, # 反馈率
'gsmc': gsmc, # 公司名称
'zwyx': zwyx, # 职位月薪
'gzdd': gzdd, # 工作地点
'gbsj': gbsj, # 公布时间
'brief': brief, # 招聘简介
'zw_link': zw_link, # 网页链接
'save_date': date # 记录信息保存的日期
} def main(args):
basic_url = 'http://sou.zhaopin.com/jobs/searchresult.ashx?' for keyword in KEYWORDS:
mongo_table = db[keyword]
paras = {'jl': args[0],
'kw': keyword,
'p': args[1] # 第X页
}
url = basic_url + urlencode(paras)
# print(url)
html = download(url)
# print(html)
if html:
data = get_content(html)
for item in data:
if mongo_table.update({'zw_link': item['zw_link']}, {'$set': item}, True):
print('已保存记录:', item) if __name__ == '__main__':
start = time.time()
number_list = list(range(TOTAL_PAGE_NUMBER))
args = product(ADDRESS, number_list)
pool = Pool()
pool.map(main, args) # 多进程运行
end = time.time()
print('Finished, task runs %s seconds.' % (end - start))

更多精彩内容请关注微信公众号:

“Python数据之道”

5分钟掌握智联招聘网站爬取并保存到MongoDB数据库的更多相关文章

  1. python之scrapy爬取数据保存到mysql数据库

    1.创建工程 scrapy startproject tencent 2.创建项目 scrapy genspider mahuateng 3.既然保存到数据库,自然要安装pymsql pip inst ...

  2. 爬取伯乐在线文章(四)将爬取结果保存到MySQL

    Item Pipeline 当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item. 每个Item Pipeline ...

  3. scrapy框架爬取智联招聘网站上深圳地区python岗位信息。

    爬取字段,公司名称,职位名称,公司详情的链接,薪资待遇,要求的工作经验年限 1,items中定义爬取字段 import scrapy class ZhilianzhaopinItem(scrapy.I ...

  4. Python爬取豆瓣音乐存储MongoDB数据库(Python爬虫实战1)

    1.  爬虫设计的技术 1)数据获取,通过http获取网站的数据,如urllib,urllib2,requests等模块: 2)数据提取,将web站点所获取的数据进行处理,获取所需要的数据,常使用的技 ...

  5. Java爬取51job保存到MySQL并进行分析

    大二下实训课结业作业,想着就爬个工作信息,原本是要用python的,后面想想就用java试试看, java就自学了一个月左右,想要锻炼一下自己面向对象的思想等等的, 然后网上转了一圈,拉钩什么的是动态 ...

  6. python爬取数据保存到Excel中

    # -*- conding:utf-8 -*- # 1.两页的内容 # 2.抓取每页title和URL # 3.根据title创建文件,发送URL请求,提取数据 import requests fro ...

  7. 关于爬取数据保存到json文件,中文是unicode解决方式

    流程: 爬取的数据处理为列表,包含字典.里面包含中文, 经过json.dumps,保存到json文件中, 发现里面的中文显示未\ue768这样子 查阅资料发现,json.dumps 有一个参数.ens ...

  8. 豆瓣电影top250爬取并保存在MongoDB里

    首先回顾一下MongoDB的基本操作: 数据库,集合,文档 db,show dbs,use 数据库名,drop 数据库 db.集合名.insert({}) db.集合名.update({条件},{$s ...

  9. 用生产者消费模型爬取智联招聘python岗位信息

    爬取python岗位智联招聘 这里爬取北京地区岗位招聘python岗位,并存入EXECEL文件内,代码如下: import json import xlwt import requests from ...

随机推荐

  1. NOIP模拟3

    期望得分:30+90+100=220 实际得分:30+0+10=40 T1智障错误:n*m是n行m列,硬是做成了m行n列 T2智障错误:读入三个数写了两个%d T3智障错误:数值相同不代表是同一个数 ...

  2. (转)使用Excel批量给数据添加单引号和逗号

    在使用PLSQL连接oracle数据库处理数据的过程中,常用的操作是通过ID查询出数据,ID需要附上单引号,如果查询的ID为一条或者几条,我们手动添加即可,但是如果是几百条.几千条的话,就需要使用一些 ...

  3. 获取Spring的ApplicationContext的几种方式

    Application Context定义 简单来说就是Spring中的高级容器,可以获取容器中的各种bean组件,注册监听事件,加载资源文件等功能. 具体定义可以参考官网:https://sprin ...

  4. 【leetcode 简单】第二十三题 二叉树的最大深度

    给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,null,null,15,7], ...

  5. Git HTTPS 方式自动保存用户名密码

    一行命令搞定: git config --global credential.helper wincred 第一次输入用户名和密码提交,第二次就不需要了 参考: https://help.github ...

  6. MongoDB 3.4.2 配置 CentOS 6.5 远程连接

    1.新建用户 db.createUser({user: 'test', pwd: 'myPassword', roles: [{role: 'readWrite', db: 'test_db'}]}) ...

  7. Three.js基础探寻五——正二十面体、圆环面等

    除了立方体.平面.球体,Three.js还提供了很多其他几何形状. 1.圆形 CircleGeometry可以创建圆形或者扇形: THREE.CircleGeometry(radius, segmen ...

  8. (转)USB的描述符及各种描述符之间的依赖关系

    全文链接:http://justmei.blog.163.com/blog/static/11609985320102421659260/?latestBlog 1 推荐 [原创] USB入门系列之七 ...

  9. utsrelease.h 包含svn信息

    utsrelease.h是一个自动生成的文件,没有办法修改,但这个数据是根据Makefile和.config的内容进行生成的,通过修改这两个文件的内容,可以改变!/usr/src/linux/Make ...

  10. tftp 开发板ping不通PC机

    开发板:JZ2440(天下2440开发板是一家) 当进入uboot界面时:输入命令print则显示: 将PC端的IP设置为192.168.1.11 在开发板上ping   192.168.1.11,若 ...