结束 txt进程_Python多进程抓取拉钩网十万数据

转载:Python多进程抓取拉钩网十万数据

准备

安装Mongodb数据库

其实不是一定要使用MongoDB,大家完全可以使用MySQL或者Redis,全看大家喜好。这篇文章我们的例子是Mongodb,所以大家需要下载它。

在Windows中。由于MongoDB默认的数据目录为C:datadb,建议大家直接在安装的时候更改默认路径为C:MongoDB.

然后创建如下目录文件:

C:datalogmongod.log //用于存储数据库的日志

C:datadb //用于存储数据库数据

然后在C:MongoDB文件夹下(安装 Mongodb 路径)创建配置文件mongod.cfg。并且在配置文件里写入以下配置:

2e16a0fa362678e1bd8548f6b84e2d4f.png

大家记住要打开文件后缀名,不然我们可能创建了一个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

开始

准备完成后,我们就开始浏览拉勾网。我们可以发现拉勾网所有的招聘职位都在左侧分类里。如图:

b5d15a6fdade3ddea54c32567a014a80.png

我们先获取首页HTML文件:

1da3d2b571a03c798322da8694eec19b.png

然后我们打开开发者工具,找到招聘职业的位置。

85815e3b688d071ebcb5b381ab361536.png

大家还记得BeautifulSoup的CSS选择器吧,我们直接使用.select()方法获取标签信息。

038adfcc2d86924c02a64f1514ccbaab.png

输出结果:

[<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属性和标签内内容,就可以获得到职位的招聘链接和招聘职位的名称了。我们准备信息生成一个字典。方便我们后续程序的调用。

00598221849da2b764d843b016c84ab5.png

这里我们用zip函数,同时迭代两个list。生成一个键值对。

接下来我们可以随意点击一个职位分类,分析招聘页面的信息。

分页

我们首先来分析下网站页数信息。经过我的观察,每个职位的招聘信息最多不超过 30 页。也就是说,我们只要从第 1 页循环到第 30 页,就可以得到所有招聘信息了。但是也可以看到有的职位招聘信息,页数并不到 30 页。以下图为例:

12f01037f98204bf84709c38d24003bc.png

如果我们访问页面:https://www.lagou.com/zhaopin/Java/31/

也就是第 31 页。我们会得到 404 页面。所以我们需要在访问到404页面时进行过滤。

ifresp.status_code ==404:

pass

这样我们就可以放心的 30 页循环获得每一页招聘信息了。

我们的每一页url使用format拼接出来:

link ='{}{}/'.format(url, str(pages))

获取信息

e78f05f5a642d16503d1bc9ae105254d.png

b62be6992bc032a6f9183ddac9acdd8d.png

获取到全部信息后,我们同样的把他们组成键值对字典。

64896cb6d293dc668793d28d57dac2dd.png

组成字典的目的是方便我们将全部信息保存到数据库。

保存数据

保存数据库前我们需要配置数据库信息:

bed31058fa1d3bc0fa78e019297062db.png

这里我们导入了pymongo库,并且与MongoDB建立连接,这里是默认连接本地的MongoDB数据。创建并选择一个数据库lagou,并在这个数据库中,创建一个table,即url_list。然后,我们进行数据的保存:

ifurl_list.insert_one(data):

print('保存数据库成功', data)

如果保存成功,打印出成功信息。

多线程爬取

十万多条数据是不是抓取的有点慢,有办法,我们使用多进程同时抓取。由于Python的历史遗留问题,多线程在Python中始终是个美丽的梦。

6d7286a56f436bacae23b29a1c559961.png

我们把之前提取职位招聘信息的代码,写成一个函数,方便我们调用。这里的parse_link()就是这个函数,他就收职位的 url 和所有页数为参数。我们get_alllink_data()函数里面使用for循环 30 页的数据。然后这个作为主函数传给多进程内部调用。

f354b13fb2055733745a415aea31bf99.png

这里是一个pool进程池,我们调用进程池的map方法.

map(func, iterable[,chunksize=None])

多进程Pool类中的map方法,与Python内置的map函数用法行为基本一致。它会使进程阻塞,直到返回结果。需要注意,虽然第二个参数是一个迭代器,但在实际使用中,必须在整个队列都就绪后,程序才会运行子进程。join()

方法等待子进程结束后再继续往下运行,通常用于进程间的同步.

反爬虫处理

如果大家就这样整理完代码,直接就开始抓取的话。相信在抓取的不久后就会出现程序中止不走了。我刚刚第一次中止后,我以为是网站限制了我的 ip。于是我做了如下改动。

88dc17fa28a0326c86146960e133cb5b.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机休眠怎么唤醒,电脑休眠后,就无法唤醒了?怎么办?快速教你解决这个问题...

电脑是目前人们生活、工作中使用最多的电子产品之一&#xff0c;我们都经常会使用到电脑。但是如果电脑在一段时间后不使用&#xff0c;电脑就会自动进入休眠状态&#xff0c;而在进入休眠状态的之后&#xff0c;只有当我们将电脑唤醒了&#xff0c;电脑才能够回到菜单界面当中…

python爬虫爬取音乐单曲_Python爬取qq音乐的过程实例

一、前言qq music上的音乐还是不少的&#xff0c;有些时候想要下载好听的音乐&#xff0c;但有每次在网页下载都是烦人的登录什么的。于是&#xff0c;来了个qqmusic的爬虫。至少我觉得for循环爬虫&#xff0c;最核心的应该就是找到待爬元素所在url吧。二、Python爬取QQ音乐单曲…

python类定义的讲解_python面向对象、自定义类等使用实例讲解

python 面向对象相对别的语言来说缺少两个功能&#xff1a; 1、python不具备重载&#xff0c;重载是指在同一个类中&#xff0c;使得方法有相同的名称&#xff0c;但是有不同的参数列表&#xff0c;但由于python函数具有强大的参数处理功能&#xff0c;因此这不是一个问题。 2、…

ubutun 更换网络源_「ubuntu脚本1」开启ssh替换第三方源开启tab键补齐屏蔽nouveau

Ubuntu初始化脚本,安装显卡驱动专用初始化脚本替换apt源为国内清华源,增加docker-ce国内源开启tab键补齐桌面版开启ssh仅支持Ubuntu16/18桌面版安装gcc make屏蔽nouveau 自动重启服务器生效#!/bin/bash #检测网络是否通畅 ping -w 5 qq.com || { echo "网络异常,脚本终止&…

matlab meshgrid函数_matlab入门(三)图像可视化

matlab图像可视化基本要求(1)掌握图形窗口的创建与控制&#xff0c;以及图形窗口的基本操作&#xff1b;(2)熟练掌握二维和三维绘图基本的命令、线型控制&#xff1b;(3)初步掌握用特殊的图形来表现特殊数据的性质&#xff0c;如面积图、直方 图、饼图等。(4)掌握坐标轴的控制和…

hashmap remove 没释放内存_java从零开始手写 redis(13)HashMap 源码原理详解

为什么学习 HashMap 源码&#xff1f;作为一名 java 开发&#xff0c;基本上最常用的数据结构就是 HashMap 和 List&#xff0c;jdk 的 HashMap 设计还是非常值得深入学习的。无论是在面试还是工作中&#xff0c;知道原理都对会我们有很大的帮助。本篇的内容较长&#xff0c;建…

南京高中计算机老师,南京市教育局召开中小学教师信息技术应用能力提升工程2.0市级专家组工作会议...

2021年3月2日上午&#xff0c;南京市中小学教师信息技术应用能力提升工程2.0市级专家组工作会议在雨花台区教师发展中心召开。市教育局副局长祁寿东出席会议并讲话&#xff0c;市教研室、教科所、电教馆、教师发展学院主要负责同志&#xff0c;市级专家团队成员及各区教师发展中…

python计算执行时间的函数_[python] 统计函数运行时间

第一种&#xff1a; import time def time_me(fn): #fn 是要修饰/修改 的函数 def _wrapper(*args, **kwargs): #这个 _wrapper(*args, **kwargs) 则代指fn, *args 代表一般变量参数&#xff0c; **kwargs代表 字典&#xff0c;哈希等参数 start time.perf_counter() fn(*args…

arthas 排查内存溢出_Java 应用线上问题排查思路、常用工具小结

前言本文总结了一些常见的线上应急现象和对应排查步骤和工具。分享的主要目的是想让对线上问题接触少的同学有个预先认知&#xff0c;免得在遇到实际问题时手忙脚乱。毕竟作者自己也是从手忙脚乱时走过来的。只不过这里先提示一下。在线上应急过程中要记住&#xff0c;只有一个…

flutter listview 滚动到指定位置_Flutter 布局原理及实战

1. Flutter UI架构Flutter将视图数据抽象成为三个部分&#xff0c;即Widget树、Element树和RenderObject树。Widget树&#xff1a;控件的配置信息&#xff0c;不涉及渲染&#xff0c;更新代价极低。RenderObject树&#xff1a;真正的UI渲染树&#xff0c;负责渲染UI&#xff0c…

雷神开机logo更改_国产外星人雷神再发新品 911MT逐影者RTX2060光追游戏本评测

随着NVIDIA发布了笔记本20系显卡之后&#xff0c;宣示着全民进入了“RTX光线追踪时代”&#xff0c;各种新款的游戏也纷纷宣布支持“光线追踪”技术来吸引更多的玩家&#xff0c;似乎现在游戏本上没有个“RTX”贴纸就已经不好意思跟别人打招呼了。说到2019年的RTX新品&#xff…

AJAX框架衣柜内部布局,​最合理的衣柜内部布局解析,3大细节不容小觑

时常有业主或者朋友问小轻&#xff0c;最合理的衣柜内部布局应该是怎样的&#xff0c;确实这对于非业内人士一般都是不太清楚的&#xff0c;即使有的朋友已经有了丰富的生活经验&#xff0c;甚至是业内人士也不一定对此完全了解。那么到底最合理的衣柜内部布局是怎样的呢&#…

python爬取数据保存为csv时生成编号_将爬取到到数据以CSV格式存储

CSV文件存储 CSV&#xff0c;全称为Comma-Separated Values&#xff0c;中文可以叫做逗号分隔值或字符分隔值&#xff0c;其文件以纯文本形式存储表格数据。该文件是一个字符序列&#xff0c;可以由任意数目的记录组成&#xff0c;记录间以某种换行符分隔。每条记录由字段组成&…

博达3956交换机配置手册_网络设备维保浅谈之交换机维保

随着信息化的飞速发展&#xff0c;交换机作为信息流通的承载者&#xff0c;是应用最为广泛的网络设备之一&#xff0c;其作用不言而喻。因此&#xff0c;在日产使用中&#xff0c;要注意交换机这种核心的设备的维护与保养&#xff0c;以免引发故障。交换机运维需要注意哪些问题…

java cas原理_Java并发之原子变量及CAS算法-上篇

Java并发之原子变量及CAS算法-上篇编辑​概述本文主要讲在Java并发编程的时候&#xff0c;如果保证变量的原子性&#xff0c;在JDK提供的类中是怎么保证变量原子性的呢&#xff1f;。对应Java中的包是&#xff1a;java.util.concurrent.atomic包下。因为涉及到了CAS算法&#x…

node ajax validator,使用validator.js对字符串数据进行验证

validator.js是一个对字符串进行数据验证和过滤的工具库&#xff0c;同时支持Node端和浏览器端&#xff0c;github地址是https://github.com/chriso/validator.js主要API如下&#xff1a;验证APIcontains(str, seed)验证str中是否含有seedequals(str, comparison)验证是否相等i…

css span 右端对齐_CSS标准文档流

web页面的制作&#xff0c;是个“流”&#xff0c;像水流一样&#xff0c;必须从上往下&#xff0c;一点点的编织&#xff0c;不像画画&#xff0c;可以这个地方画一个&#xff0c;另一个地方画一个&#xff0c;随意而为。标准文档流的一些微观现象1. 空白折叠现象1)标签与标签…

composer升级_Composer 使用姿势与 Lumen 升级指南

Composer 使用姿势这里主要说说 composer.json 和 composer.lock 文件的作用。composer.jsoncomposer.json 文件包含了项目的依赖和其它的一些元数据&#xff0c;使用 JSON format 编写。当初次调用 composer install 时&#xff0c;Composer 会根据 composer.json 文件&#x…

服务器间传文件$d,基于OpenSSH+WinSCP完成Windows服务器之间的文件传输

背景经常会遇到在不同服务器之间传输文件&#xff0c;Linux和Linux之间用命令rsync&#xff0c; windows和linux之间普遍是有图形化界面的ftp软件&#xff0c;老黄平时用的比较多的是FileZilla。Windows和Windows之间的话&#xff0c;90%都是在一台机器复制&#xff0c;到另一台…

dbgrideh 为什么只一行_Mysql性能优化:为什么count(*)这么慢?

导读在开发中一定会用到统计一张表的行数&#xff0c;比如一个交易系统&#xff0c;老板会让你每天生成一个报表&#xff0c;这些统计信息少不了sql中的count函数。但是随着记录越来越多&#xff0c;查询的速度会越来越慢&#xff0c;为什么会这样呢&#xff1f;Mysql内部到底是…