Python_爬虫项目
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_爬虫项目的更多相关文章
- 基于webmagic的爬虫项目经验小结
大概在1个月前,利用webmagic做了一个爬虫项目,下面是该项目的一些个人心得,贴在这里备份: 一.为什么选择webmagic? 说实话,开源的爬虫框架已经很多了,有各种语言(比如:python.j ...
- 实用的开源百度云分享爬虫项目yunshare - 安装篇
今天开源了一个百度云网盘爬虫项目,地址是https://github.com/callmelanmao/yunshare. 百度云分享爬虫项目 github上有好几个这样的开源项目,但是都只提供了爬虫 ...
- 推荐几个优秀的java爬虫项目
java爬虫项目 大型的: Nutch apache/nutch · GitHub 适合做搜索引擎,分布式爬虫是其中一个功能. Heritrix internetarchive/heritrix3 ...
- Python即时网络爬虫项目启动说明
作为酷爱编程的老程序员,实在按耐不下这个冲动,Python真的是太火了,不断撩拨我的心. 我是对Python存有戒备之心的,想当年我基于Drupal做的系统,使用php语言,当语言升级了,推翻了老版本 ...
- Python即时网络爬虫项目: 内容提取器的定义(Python2.7版本)
1. 项目背景 在Python即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间太多了(见上图),从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端 ...
- Python即时网络爬虫项目: 内容提取器的定义
1. 项目背景 在python 即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间,从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端的数据处理工作 ...
- 在Pycharm中运行Scrapy爬虫项目的基本操作
目标在Win7上建立一个Scrapy爬虫项目,以及对其进行基本操作.运行环境:电脑上已经安装了python(环境变量path已经设置好), 以及scrapy模块,IDE为Pycharm .操作如下: ...
- C语言Linix服务器网络爬虫项目(二)项目设计和通过一个http请求抓取网页的简单实现
我们通过上一篇了解了爬虫具体要实现的工作之后,我们分析得出的网络爬虫的基本工作流程如下: 1.首先选取一部分精心挑选的种子URL: 2.将这些URL放入待抓取URL队列: 3.从待抓取URL队列中取出 ...
- C语言Linix服务器网络爬虫项目(一)项目初衷和网络爬虫概述
一.项目初衷和爬虫概述 1.项目初衷 本人的大学毕设就是linux上用c写的一个爬虫,现在我想把它完善起来,让他像一个企业级别的项目.为了重复发明轮子来学习轮子的原理,我们不使用第三方框架(这里是说的 ...
随机推荐
- 无法访问GitHub
我们开发者经常用的最大的同性交流平台--GitHub忽然访问不了了,很尴尬 可以打开控制台 ping一下 github.com 果不其然 不通 不过幸运的是里面有github的ip地址,好像是美国某个 ...
- abp(net core)+easyui+efcore实现仓储管理系统——出库管理之三(五十一)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统--ABP总体介绍(一) abp(net core)+ ...
- 搭建分布式 Redis Cluster 集群与 Redis 入门
目录 Redis 集群搭建 Redis 是啥 集群(Cluster) Redis Cluster 说明 Redis Cluster 节点 Redis Cluster 集群模式 不能保证一致性 创建和使 ...
- Vue 路由模块入门
前端路由 路由是根据不同的 url 展示不同的内容或页面: 前端路由是客户端浏览器可以不依赖服务端,不需要重新请求,可根据不同的URL渲染不同的视图页面 单页面的路由方式有两种: 哈希模式(利用has ...
- Java网关服务-AIO(三)
Java网关服务-AIO(三) 概述 前两节中,我们已经获取了body的总长度,剩下的就是读出body,处理请求 ChannelServerHandler ChannelServerHandler即从 ...
- IOS8 对flex兼容性问题
问题: IOS8.2 dispaly:flex:不生效: 注意一下兼容写法的顺序问题, display: -webkit-box; /* Chrome 4+, Safari 3.1, iOS Saf ...
- 【Flutter 混合开发】添加 Flutter 到 Android Activity
Flutter 混合开发系列 包含如下: 嵌入原生View-Android 嵌入原生View-iOS 与原生通信-MethodChannel 与原生通信-BasicMessageChannel 与原生 ...
- Redis学习笔记(四)——数据结构之List
一.介绍 Redis列表(List)是简单的字符串列表,按照插入顺序排序.你可以添加一个元素到列表的头部(left)或者尾部(right),一个列表最多可以包含232-1个元素(4294967295, ...
- SpringApplication.run(xxx.class, args)背后的东东——整体脉络
从spring到springmvc,再到springboot.springcloud,应用程序api开发调用方面都已经非常熟悉,但对spring背后的扩展机制:为何一个简单的main方法可以实现这么强 ...
- Django之富文本(获取内容,设置内容)
富文本 1.Rich Text Format(RTF) 微软开发的跨平台文档格式,大多数的文字处理软件都能读取和保存RTF文档,其实就是可以添加样式的文档,和HTML有很多相似的地方 图示 2.tin ...