python网页数据抓取( 招聘职业的位置:的CSS选择器工具获取标签信息 )

优采云 发布时间: 2021-10-03 14:06

  python网页数据抓取(

招聘职业的位置:的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。所以我做了以下改动。

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线