1、爬虫——智联招聘信息搜集    原文链接

  1 #-*- coding: utf-8 -*-
2 import re
3 import csv
4 import requests
5 from tqdm import tqdm
6 from urllib.parse import urlencode
7 from requests.exceptions import RequestException
8
9 def get_one_page(city, keyword, region, page):
10 '''
11 获取网页html内容并返回
12 '''
13 paras = {
14 'jl': city, # 搜索城市
15 'kw': keyword, # 搜索关键词
16 'isadv': 0, # 是否打开更详细搜索选项
17 'isfilter': 1, # 是否对结果过滤
18 'p': page, # 页数
19 're': region # region的缩写,地区,2005代表海淀
20 }
21
22 headers = {
23 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
24 'Host': 'sou.zhaopin.com',
25 'Referer': 'https://www.zhaopin.com/',
26 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
27 'Accept-Encoding': 'gzip, deflate, br',
28 'Accept-Language': 'zh-CN,zh;q=0.9'
29 }
30
31 url = 'https://sou.zhaopin.com/jobs/searchresult.ashx?' + urlencode(paras)
32 try:
33 # 获取网页内容,返回html数据
34 response = requests.get(url, headers=headers)
35 # 通过状态码判断是否获取成功
36 if response.status_code == 200:
37 return response.text
38 return None
39 except RequestException as e:
40 return None
41
42 def parse_one_page(html):
43 '''
44 解析HTML代码,提取有用信息并返回
45 '''
46 # 正则表达式进行解析
47 pattern = re.compile('<a style=.*? target="_blank">(.*?)</a>.*?' # 匹配职位信息
48 '<td class="gsmc"><a href="(.*?)" target="_blank">(.*?)</a>.*?' # 匹配公司网址和公司名称
49 '<td class="zwyx">(.*?)</td>', re.S) # 匹配月薪
50
51 # 匹配所有符合条件的内容
52 items = re.findall(pattern, html)
53
54 for item in items:
55 job_name = item[0]
56 job_name = job_name.replace('<b>', '')
57 job_name = job_name.replace('</b>', '')
58 yield {
59 'job': job_name,
60 'website': item[1],
61 'company': item[2],
62 'salary': item[3]
63 }
64
65 def write_csv_file(path, headers, rows):
66 '''
67 将表头和行写入csv文件
68 '''
69 # 加入encoding防止中文写入报错
70 # newline参数防止每写入一行都多一个空行
71 with open(path, 'a', encoding='gb18030', newline='') as f:
72 f_csv = csv.DictWriter(f, headers)
73 f_csv.writeheader()
74 f_csv.writerows(rows)
75
76 def write_csv_headers(path, headers):
77 '''
78 写入表头
79 '''
80 with open(path, 'a', encoding='gb18030', newline='') as f:
81 f_csv = csv.DictWriter(f, headers)
82 f_csv.writeheader()
83
84 def write_csv_rows(path, headers, rows):
85 '''
86 写入行
87 '''
88 with open(path, 'a', encoding='gb18030', newline='') as f:
89 f_csv = csv.DictWriter(f, headers)
90 f_csv.writerows(rows)
91
92 def main(city, keyword, region, pages):
93 '''
94 主函数
95 '''
96 filename = 'zl_' + city + '_' + keyword + '.csv'
97 headers = ['job', 'website', 'company', 'salary']
98 write_csv_headers(filename, headers)
99 for i in tqdm(range(pages)):
100 '''
101 获取该页中所有职位信息,写入csv文件
102 '''
103 jobs = []
104 html = get_one_page(city, keyword, region, i)
105 items = parse_one_page(html)
106 for item in items:
107 jobs.append(item)
108 write_csv_rows(filename, headers, jobs)
109
110 if __name__ == '__main__':
111 main('北京', 'python',2005 , 10)

智联招聘Python岗位信息搜集

Python_爬虫项目的更多相关文章

  1. 基于webmagic的爬虫项目经验小结

    大概在1个月前,利用webmagic做了一个爬虫项目,下面是该项目的一些个人心得,贴在这里备份: 一.为什么选择webmagic? 说实话,开源的爬虫框架已经很多了,有各种语言(比如:python.j ...

  2. 实用的开源百度云分享爬虫项目yunshare - 安装篇

    今天开源了一个百度云网盘爬虫项目,地址是https://github.com/callmelanmao/yunshare. 百度云分享爬虫项目 github上有好几个这样的开源项目,但是都只提供了爬虫 ...

  3. 推荐几个优秀的java爬虫项目

    java爬虫项目   大型的: Nutch apache/nutch · GitHub 适合做搜索引擎,分布式爬虫是其中一个功能. Heritrix internetarchive/heritrix3 ...

  4. Python即时网络爬虫项目启动说明

    作为酷爱编程的老程序员,实在按耐不下这个冲动,Python真的是太火了,不断撩拨我的心. 我是对Python存有戒备之心的,想当年我基于Drupal做的系统,使用php语言,当语言升级了,推翻了老版本 ...

  5. Python即时网络爬虫项目: 内容提取器的定义(Python2.7版本)

    1. 项目背景 在Python即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间太多了(见上图),从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端 ...

  6. Python即时网络爬虫项目: 内容提取器的定义

    1. 项目背景 在python 即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间,从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端的数据处理工作 ...

  7. 在Pycharm中运行Scrapy爬虫项目的基本操作

    目标在Win7上建立一个Scrapy爬虫项目,以及对其进行基本操作.运行环境:电脑上已经安装了python(环境变量path已经设置好), 以及scrapy模块,IDE为Pycharm .操作如下: ...

  8. C语言Linix服务器网络爬虫项目(二)项目设计和通过一个http请求抓取网页的简单实现

    我们通过上一篇了解了爬虫具体要实现的工作之后,我们分析得出的网络爬虫的基本工作流程如下: 1.首先选取一部分精心挑选的种子URL: 2.将这些URL放入待抓取URL队列: 3.从待抓取URL队列中取出 ...

  9. C语言Linix服务器网络爬虫项目(一)项目初衷和网络爬虫概述

    一.项目初衷和爬虫概述 1.项目初衷 本人的大学毕设就是linux上用c写的一个爬虫,现在我想把它完善起来,让他像一个企业级别的项目.为了重复发明轮子来学习轮子的原理,我们不使用第三方框架(这里是说的 ...

随机推荐

  1. 单调队列优化题:最大数(P1198)

    题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:不超过当前数列的长度.(L>0) ...

  2. jquery1.9+,jquery1.10+ 为什么不支持live方法了?

    live() 替换成 on() die()  替换成off() 根据jQuery的官方描述,live方法在1.7中已经不建议使用,在1.9中删除了这个方法.并建议在以后的代码中使用on方法来替代. o ...

  3. C# 微支付 JSAPI支付方式 V3.3.6版本

    <script type="text/javascript">//结算 (订单号) function PayClearing(num) { $.ajax({ type: ...

  4. ubuntu JDK&SDK 环境变量配置

    ubuntu JDK&SDK 环境变量配置 一.下载JDK 1. 先卸载Ubuntu 带的openJDK: sudo apt-get purge openjdk* 2.到http://www. ...

  5. 3. Distributional Reinforcement Learning with Quantile Regression

    C51算法理论上用Wasserstein度量衡量两个累积分布函数间的距离证明了价值分布的可行性,但在实际算法中用KL散度对离散支持的概率进行拟合,不能作用于累积分布函数,不能保证Bellman更新收敛 ...

  6. ORA-28000错误解决方案

    当使用SQL*Plus登录时,Oracle数据库时提示"ORA-28000:帐号被锁定". 导致出现改错误的原因是:在oracle database 11g中,默认在default ...

  7. 第三章 MySQL的多实例

    一.MySQL服务构成 1.MySQL程序结构 1.连接层 2.sql层 3.存储引擎层 2.MySQL逻辑结构 1.库 2.表:元数据+真实数据行 3.元数据:列+其它属性(行数+占用空间大小+权限 ...

  8. 谈谈nginx和lvs各自的优缺点以及使用

            在最开始呢,咱们先说一下什么叫负载均衡,负载均衡呢,就是将一批请求,根据请求的内容,分发到不同的后端去进行相应的处理,从而提供负载分担,主备切换等功能.                 ...

  9. Java学习的第四十四天

    1.例5.4将二维数组的行列互换 public class cjava { public static void main(String []args) { int [][]a=new int [][ ...

  10. Java学习的第六天

    1.今天学习了各种运算符, 还有选择结构,循环结构 2.今天学习没有遇到困难. 3.明天学习数组和第三章的开头一部分.