python多进程爬虫保存数据_如果你不会Python多进程!那你会爬虫?扯淡!抓取拉钩网十万数据...

这篇文章我们来抓取 拉钩网 的招聘信息。全部抓取大概十几万条全国招聘信息,并且保存数据库。

准备

安装Mongodb数据库

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

26e9620a2a05ec32f15485daa1e3fc67.png

最后我们需要打开管理员权限的 CMD 窗口,执行如下命令,安装数据库成服务:

"C:\mongodb\bin\mongod.exe" --config "C:\mongodb\mongod.cfg" --install

设置为服务后,需要在管理员权限打开的windows cmd窗口用服务的方式启动或停止MongoDB。

f053e14a8514f4a1a6979f4cec5f3ff9.png

fb98733478b37110e3c2e1ac69617757.png

我们先获取首页HTML文件:

import requests

from bs4 import BeautifulSoup

from requests.exceptions import RequestException

url = 'https://www.lagou.com/'

# 获取页面源码函数

def get_page_resp(url):

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}

try:

resp = requests.get(url, headers=headers)

if resp.status_code == 200:

return resp.text

return None

except RequestException:

return None

soup = BeautifulSoup(get_page_resp(url), 'lxml')

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

8bd888809a7c2023f6323ed3329d1930.png

d81e851a0486147baf984dba19037636.png

1b35342316ee512a3493b9a2709ab1e3.png

分页

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

c40268234524c47b013bf0c27710c4ad.png

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

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

if resp.status_code == 404:

pass

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

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

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

获取信息

1205b414d9bcddf8c18636a4a53b2296.png

37bfa2e87c25299552b54ff46e16e640.png

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

for position,add,publish,money,need,company,tag,fuli in \

zip(positions,adds,publishs,moneys,needs,companys,tags,fulis):

data = {

'position' : position.get_text(),

'add' : add.get_text(),

'publish' : publish.get_text(),

'money' : money.get_text(),

'need' : need.get_text().split('\n')[2],

'company' : company.get_text(),

'tag' : tag.get_text().replace('\n','-'),

'fuli' : fuli.get_text()

}

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

保存数据库

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

import pymongo

client = pymongo.MongoClient('localhost', 27017)

lagou = client['lagou']

url_list = lagou['url_list']

c4ea1684b397bd2d2ef9a05106449412.png

c9b2993f8c0d519d4ca0083f3f4046ee.png

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

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

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

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

针对反爬

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

ddf391240c735aeb7c1fc671be7d1056.png

9b85c539bb904e0db22cda551d2dcab9.png

09f14a61e633047b62911a444381e035.png

19595a5823bde2dfb21819fd17e47008.png

ac759db55a4e2c061363092afa62bd91.png

63e18acdc79a8c298ee6a4d52cfecf4b.png

72125d7cd87c3a2567c4204df0b920f4.png

如果博主后面把全部数据抓下来后,可以和大家一起进行数据分析,分析Python招聘的一些信息啊什么的。大家加油。

进群:125240963   即可获取源码!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值