前言

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

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

第一篇先来介绍数据采集,即用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. poi对word的操作(总结)

    ★★★ POI在读写word docx文件时是通过xwpf模块来进行的,其核心是XWPFDocument.    1.正文段落:一个文档包含多个段落Paragraph,一个段落包含多个Runs,一个R ...

  2. 817C. Really Big Numbers 二分

    LINK 题意:给出两个数n, s,要求问1~n中\(x-bit(x)>=s\)的数有多少个.其中bit(x)指x的各位数之和 思路:首先观察能够发现,对于一个数如果满足了条件,由于x-bit( ...

  3. JAVA多线程提高十一:同步工具Exchanger

    Exchanger可以在对中对元素进行配对和交换的线程的同步点.每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象.Exchanger 可能被视 ...

  4. Isomorphic JavaScript: The Future of Web Apps(译)

                                                                                                 Isomorp ...

  5. 【BZOJ】1485: [HNOI2009]有趣的数列

    [算法]Catalan数 [题解] 学了卡特兰数就会啦>_<! 因为奇偶各自递增,所以确定了奇偶各自的数字后排列唯一. 那么就是给2n个数分奇偶了,是不是有点像入栈出栈序呢. 将做偶数标为 ...

  6. Vue 脱坑记

    问题汇总 Q:安装超时(install timeout) 方案有这么些: cnpm : 国内对npm的镜像版本 /* cnpm website: https://npm.taobao.org/ */ ...

  7. JS设计模式——5.单体模式(用了这么久,竟全然不知!)

    单体模式的优势 用了这么久的单体模式,竟全然不知!用它具体有哪些好处呢? 1.可以用它来划分命名空间(这个就是就是经常用的了) 2.利用分支技术来封装浏览器之间的差异(这个还真没用过,挺新鲜) 3.借 ...

  8. Tornado/Python 学习笔记(二)

    部分ssrpc.py代码分析 -- 服务端: 1 #!/usr/bin/python3 2 3 from xmlrpc.client import Fault, dumps, loads 4 impo ...

  9. 174.Dungeon Game---dp

    题目链接 题目大意:从左上角到右下角,每一个格子都有各自的权值,如果权值为负,则当到达时,要失血:如果权值为正,则当到达时,要加血.当到达某个格子时,当前血量<=0,则死亡,到达不了右下角,所以 ...

  10. java 1.8 新特性 stream

    并发提升 java 中Stream类似于hadoop中的数据分析的思路,只不过hadoop大,用的是多台机算机的计算生态,而java  stream使用的单台计算机中的多cpu分析一块数据的过程.通过 ...