结束 txt进程_Python多进程抓取拉钩网十万数据
转载:Python多进程抓取拉钩网十万数据
准备
安装Mongodb数据库
其实不是一定要使用MongoDB,大家完全可以使用MySQL或者Redis,全看大家喜好。这篇文章我们的例子是Mongodb,所以大家需要下载它。
在Windows中。由于MongoDB默认的数据目录为C:datadb,建议大家直接在安装的时候更改默认路径为C:MongoDB.
然后创建如下目录文件:
C:datalogmongod.log //用于存储数据库的日志
C:datadb //用于存储数据库数据
然后在C:MongoDB文件夹下(安装 Mongodb 路径)创建配置文件mongod.cfg。并且在配置文件里写入以下配置:
大家记住要打开文件后缀名,不然我们可能创建了一个mongod.cfg.txt文件。
最后我们需要打开管理员权限的 CMD 窗口,执行如下命令,安装数据库成服务:
"C:mongodbbinmongod.exe"--config "C:mongodbmongod.cfg"--install
设置为服务后,需要在管理员权限打开的windows cmd窗口用服务的方式启动或停止MongoDB。
net start mongodb //启动mongodb服务
net stop mongodb //关闭mongodb服务
好了,安装好Mongodb数据库后,我们需要安装PyMongo,它是MongoDB的Python接口开发包。
pip install pymongo
推荐下我自己创建的Python学习交流群960410445
开始
准备完成后,我们就开始浏览拉勾网。我们可以发现拉勾网所有的招聘职位都在左侧分类里。如图:
我们先获取首页HTML文件:
然后我们打开开发者工具,找到招聘职业的位置。
大家还记得BeautifulSoup的CSS选择器吧,我们直接使用.select()方法获取标签信息。
输出结果:
[<a class="curr"href="https://www.lagou.com/zhaopin/Java/"data-lg-tj-cid="idnull"data-lg-tj-id="4O00"data-lg-tj-no="0101">Java</a>, <a class="curr"href="https://www.lagou.com/zhaopin/C%2B%2B/"data-lg-tj-cid="idnull"data-lg-tj-id="4O00"data-lg-tj-no="0102">C++</a>, # ... 省略部分 https://www.lagou.com/zhaopin/fengxiankongzhizongjian/" data-lg-tj-cid="idnull" data-lg-tj-id="4U00" data-lg-tj-no="0404">风控总监, https://www.lagou.com/zhaopin/zongcaifuzongcai/" data-lg-tj-cid="idnull" data-lg-tj-id="4U00" data-lg-tj-no="0405">副总裁]
260
获取到所有职位标签的a标签后,我们只需要提取标签的href属性和标签内内容,就可以获得到职位的招聘链接和招聘职位的名称了。我们准备信息生成一个字典。方便我们后续程序的调用。
这里我们用zip函数,同时迭代两个list。生成一个键值对。
接下来我们可以随意点击一个职位分类,分析招聘页面的信息。
分页
我们首先来分析下网站页数信息。经过我的观察,每个职位的招聘信息最多不超过 30 页。也就是说,我们只要从第 1 页循环到第 30 页,就可以得到所有招聘信息了。但是也可以看到有的职位招聘信息,页数并不到 30 页。以下图为例:
如果我们访问页面:https://www.lagou.com/zhaopin/Java/31/
也就是第 31 页。我们会得到 404 页面。所以我们需要在访问到404页面时进行过滤。
ifresp.status_code ==404:
pass
这样我们就可以放心的 30 页循环获得每一页招聘信息了。
我们的每一页url使用format拼接出来:
link ='{}{}/'.format(url, str(pages))
获取信息
获取到全部信息后,我们同样的把他们组成键值对字典。
组成字典的目的是方便我们将全部信息保存到数据库。
保存数据
保存数据库前我们需要配置数据库信息:
这里我们导入了pymongo库,并且与MongoDB建立连接,这里是默认连接本地的MongoDB数据。创建并选择一个数据库lagou,并在这个数据库中,创建一个table,即url_list。然后,我们进行数据的保存:
ifurl_list.insert_one(data):
print('保存数据库成功', data)
如果保存成功,打印出成功信息。
多线程爬取
十万多条数据是不是抓取的有点慢,有办法,我们使用多进程同时抓取。由于Python的历史遗留问题,多线程在Python中始终是个美丽的梦。
我们把之前提取职位招聘信息的代码,写成一个函数,方便我们调用。这里的parse_link()就是这个函数,他就收职位的 url 和所有页数为参数。我们get_alllink_data()函数里面使用for循环 30 页的数据。然后这个作为主函数传给多进程内部调用。
这里是一个pool进程池,我们调用进程池的map方法.
map(func, iterable[,chunksize=None])
多进程Pool类中的map方法,与Python内置的map函数用法行为基本一致。它会使进程阻塞,直到返回结果。需要注意,虽然第二个参数是一个迭代器,但在实际使用中,必须在整个队列都就绪后,程序才会运行子进程。join()
方法等待子进程结束后再继续往下运行,通常用于进程间的同步.
反爬虫处理
如果大家就这样整理完代码,直接就开始抓取的话。相信在抓取的不久后就会出现程序中止不走了。我刚刚第一次中止后,我以为是网站限制了我的 ip。于是我做了如下改动。
结束 txt进程_Python多进程抓取拉钩网十万数据相关推荐
- scrapy爬虫实践之抓取拉钩网招聘信息(2)
今天遇到了一个百思不得其解的问题.我用xpath获取目标网页的divs,理论上来说,应该是把这个div下的所有div存进了列表里,但是语句却是这样写的 divs = response.xpath('/ ...
- 亲自抓取拉钩真实数据告诉你2017年末Android开发行情怎样了?
2017年Android开发到底怎样了?这个问题,很多群里和有没有毕业的大学生都问过我.这次我用数据告诉你. 我抓取了拉钩12-20这天Android开发的招聘需求,涵盖北京.上海.深圳.广州.杭州. ...
- python爬取拉勾网_python爬虫—爬取拉钩网
本人自学python,小试牛刀,爬取广州片区拉钩网招聘信息.仅用于学习 参考文章:https://blog.csdn.net/SvJr6gGCzUJ96OyUo/article/details/805 ...
- python抓取数据库数据_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储...
Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...
- python爬虫实现股票数据存储_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储!...
Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...
- python爬虫爬取股票软件数据_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储(转载)...
完整代码 实际上,整个事情完成了两个相对独立的过程:1.爬虫获取网页股票数据并保存到本地文件:2.将本地文件数据储存到MySQL数据库.并没有直接的考虑把从网页上抓取到的数据实时(或者通过一个临时文件 ...
- MySQL 怎么插入10天前的日期_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储!...
Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...
- scrapy爬虫实践之抓取拉钩网招聘信息(4)
拉勾的302搞的我不心力憔悴,几乎失去了动力继续再研究拉勾爬虫-实际上,这种无力感很大程度上来源于知识结构的匮乏(尤其是基础方面)和毫无进展带来的挫败感. 于是乎去读基础教程<learning ...
- python爬虫外贸客户_python 爬虫抓取亚马逊数据
1 #生成随机头 2 defrandHeader():3 head_connection = ['Keep-Alive', 'close']4 head_accept = ['text/html, a ...
最新文章
- php 修改数据库表的字段的值
- Tomcat的配置文件server.xml叙述
- javascript判断数组是否包含了指定的元素
- “睡服”面试官系列第十五篇之对象的扩展(建议收藏学习)
- Kafka单节点单broker的部署和使用
- ios打不开html文件,在DocumentsWeb目录中打开UIWebview时,ios-css和js在html文件中无法链接...
- python 二维列表切片_Python中mutable与immutable和二维列表的初始化问题
- 日记 - idea中的中文注释出现乱码的解决方案
- PHP简易留言板项目
- 【独家折扣】淘客小程序源码
- 2022年全球与中国飞秒光纤激光器市场现状及未来发展趋势
- react-ssr之路由配置
- 淘宝API 拍立淘图片搜索接口
- 社会保险费的缴费基数与缴费比例
- NLP-准确率、精确率、召回率和F1值
- 如何将图片表格转换为excel表格?
- 【HTML系列】之HTML字体颜色设置
- 【机器翻译】机器翻译入门
- Python3D绘图后用自带展示器查看(可旋转)
- 腾达n4怎么设置虚拟服务器,腾达(Tenda)N4无线路由器怎么设置
热门文章
- SpringBoot整合Redis(单机/哨兵/集群)
- Git 添加和提交组合命令
- git下载安装、验证、企业实战单机、多人协作
- Optional 处理空指针
- Java-数组的使用
- 零基础学python难_0基础学python有多难
- php email,两种PHP邮件发送的方式
- qt自定义含有拖动功能的窗口在点击窗口的下拉列表时窗口移动
- linux sed 正则转义,Linux运维云升笔记 (一)正则表达式以及文档编辑器sed
- centos7已有数据硬盘挂载_干货!如何给虚拟机增加虚拟硬盘,Linux再分区挂载