python网页数据抓取( 招聘职业的位置:的CSS选择器工具获取标签信息 )
优采云 发布时间: 2021-10-03 14:06python网页数据抓取(
招聘职业的位置:的CSS选择器工具获取标签信息
)
然后我们打开开发者工具,找到招聘职业的位置。
大家记得BeautifulSoup的CSS选择器,我们直接使用.select()方法来获取标签信息。
输出结果:
[/zhaopin/Java/"data-lg-tj-cid="idnull"data-lg-tj-id="4O00"data-lg-tj-no="0101">Java, %2B%2B/"data -lg-tj-cid="idnull"data-lg-tj-id="4O00"data-lg-tj-no="0102">C++, # ... 省略部分" data-lg-tj-cid= "idnull" data-lg-tj-id="4U00" data-lg-tj-no="0404">风控总监, "data-lg-tj-cid="idnull" data-lg-tj-id = "4U00" data-lg-tj-no="0405">副总裁]
260
获取到所有职位标签的a标签后,我们只需要提取标签的href属性和标签中的内容,就可以得到职位的招聘链接和职位名称。我们准备信息以生成字典。便于调用我们的后续程序。
这里我们使用 zip 函数同时迭代两个列表。生成键值对。
接下来,我们可以随意点击一个职位类别来分析招聘页面上的信息。
分页
我们先来分析一下网站页面信息。经过我的观察,每个职位的招聘信息最多不超过30页。也就是说,只要我们从第1页循环到第30页,就可以得到所有的招聘信息。但是也可以看到一些招聘信息,页数不到30页。以下图为例:
如果我们访问页面:/zhaopin/Java/31/
那是第 31 页。我们将得到一个 404 页。所以我们在访问404页面时需要进行过滤。
ifresp.status_code ==404:
经过
这样,我们就可以放心的在30页的周期内拿到每一页的招聘信息。
我们每个页面的url都是用格式拼接出来的:
link ='{}{}/'.format(url, str(pages))
获取资讯
获得所有信息后,我们还将它们组合成一个键值对字典。
字典的目的是方便我们将所有信息保存到数据库中。
保存数据
在保存数据库之前,我们需要配置数据库信息:
这里我们导入pymongo库并建立与MongoDB的连接,这里是本地MongoDB数据的默认连接。创建并选择一个数据库lagou,并在该数据库中创建一个表,即url_list。然后,我们保存数据:
ifurl_list.insert_one(数据):
print('保存数据库成功', data)
如果保存成功,会打印成功信息。
多线程爬取
10万多条数据的爬取是不是有点慢?有一个办法,我们用多个进程同时爬取。由于 Python 的历史遗留问题,多线程在 Python 中一直是一个美丽的梦想。
我们把提取职位招聘信息的代码写成一个函数,方便我们调用。这里的 parse_link() 就是这个函数,它以帖子的 url 和所有页面的数量作为参数。我们在 get_alllink_data() 函数的 for 循环中使用了 30 页数据。然后 this 作为主函数传递给多进程内部调用。
这里是一个pool进程池,我们调用进程池的map方法。
地图(功能,可迭代[,块大小=无])
多进程Pool类中的map方法与Python内置map函数的用法和行为基本一致。它将阻塞进程,直到返回结果。需要注意的是,虽然第二个参数是迭代器,但在实际使用中,程序只有在整个队列准备好后才会运行子进程。加入()
该方法等待子进程结束,然后继续向下运行,通常用于进程之间的同步。
反爬虫处理
像这样写完代码,就开始爬吧。我相信程序不会在爬行后很快停止。第一次停止后,我以为是网站限制了我的ip。所以我做了以下改动。