之前文章中所介绍的爬虫都是对单个URL进行解析和爬取,url数量少不费时,但是如果我们需要爬取的网页url有成千上万或者更多,那怎么办?

使用for循环对所有的url进行遍历访问?

嗯,想法很好,但是如果url过多,爬取完所有的数据会不会太过于耗时了?

对此我们可以使用并发来对URL进行访问以爬取数据。

一般而言,在单机上我们使用三种并发方式:多线程(threading)

多进程(multiprocessing)

协程(gevent)

对于以上三种方法的具体概念解释和说明,各位可以自行网上搜索了解,相信会比我解释得清楚,所以在此就不对它们进行解释说明了。

本系列文章有两个重点,一个是实战,一个是入门,既为实战,理论性的东西就描述得比较少;既为入门,所讲述的都是简单易懂易操作的东西,高深的技术还请入门之后自行探索,那样也会成长得更快。

那么下面,开始并发爬取的实战入门,以多进程为例,并发爬取智联招聘的招聘信息。

一、分析URL和页面结构

1、搜索全国范围内职位名包含“Python”的职位招聘

我们不分职业类别、不分行业类别,工作地点选为全国,职位名为“Python”,对招聘信息进行搜索,结果如下图:

我们注意图中三个红框的信息:搜索结果的url结构;(构造url地址进行for循环遍历)

搜索结果的条数;(判断url的数量)

采集的信息的主体;(解析数据)

通过筛选url参数,我们确定了需要爬取的基本URL为:

http://sou.zhaopin.com/jobs/searchresult.ashx?jl=全国&kw=python&kt=3&p=2

其中

http://sou.zhaopin.com/jobs/searchresult.ashx

为请求地址和目录

jl:工作地点参数

kw:搜索的关键字

kt:以职位名搜索

p:页数

我们可以发现,除了页数会变化之外,其余的参数值都是固定的值。我们来确定一下搜索结果的总页数。

因为网页上有提示一共有多少个职位满足条件,我们拿总职位数除以单页显示的职位数量即可知道搜索结果的页数。

# coding:utf-8

import requests

from bs4 import BeautifulSoup

import re

url = 'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=全国&kw=python&p=1&kt=3'

wbdata = requests.get(url).content

soup = BeautifulSoup(wbdata, 'lxml')

items = soup.select("div#newlist_list_content_table > table")

count = len(items) - 1

# 每页职位信息数量

print(count)

job_count = re.findall(r"共(.*?)个职位满足条件", str(soup))[0]

# 搜索结果页数

pages = (int(job_count) // count) + 1

print(pages)

结果返回每页60条职位信息,一共有14页。

那么我们的待爬取的url地址就有14个,url地址中参数p的值分别从1到14,这么少的url,使用for循环也可以很快完成,但在此我们使用多进程进行演示。

二、在爬虫中使用多进程

先上代码:

# coding:utf-8

import requests

from bs4 import BeautifulSoup

from multiprocessing import Pool

def get_zhaopin(page):

url = 'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=全国&kw=python&p={0}&kt=3'.format(page)

print("第{0}页".format(page))

wbdata = requests.get(url).content

soup = BeautifulSoup(wbdata,'lxml')

job_name = soup.select("table.newlist > tr > td.zwmc > div > a")

salarys = soup.select("table.newlist > tr > td.zwyx")

locations = soup.select("table.newlist > tr > td.gzdd")

times = soup.select("table.newlist > tr > td.gxsj > span")

for name, salary, location, time in zip(job_name, salarys, locations, times):

data = {

'name': name.get_text(),

'salary': salary.get_text(),

'location': location.get_text(),

'time': time.get_text(),

}

print(data)

if __name__ == '__main__':

pool = Pool(processes=2)

pool.map_async(get_zhaopin,range(1,pages+1))

pool.close()

pool.join()

结果如下:

因为除了使用了多进程之外,其他的代码与之前文章介绍的方法大同小异,所以在此只介绍一下多进程的核心代码:

from multiprocessing import Pool

multiprocessing是Python自带的一个多进程模块,在此我们使用其Pool方法。

if __name__ == '__main__':

pool = Pool(processes=2)

pool.map_async(get_zhaopin,range(1,pages+1))

pool.close()

pool.join()实例化一个进程池,设置进程为2;

调用进程池的map_async()方法,接收一个函数(爬虫函数)和一个列表(url列表)

如此,在爬虫中使用多进程进行并发爬取就搞定了,更多高级、复杂强大的方法,还请各位参考其他文档资料。

=======================================================================

文章首发微信公众号:州的先生

python爬虫多url_Python爬虫实战入门六:提高爬虫效率—并发爬取智联招聘相关推荐

  1. python如何并发上千个get_Python爬虫实战入门六:提高爬虫效率—并发爬取智联招聘...

    匿名说道: # coding:utf-8 import requests from bs4 import BeautifulSoup url = 'https://sou.zhaopin.com/jo ...

  2. Python爬虫爬取智联招聘职位信息

    目的:输入要爬取的职位名称,五个意向城市,爬取智联招聘上的该信息,并打印进表格中 #coding:utf-8 import urllib2 import re import xlwtclass ZLZ ...

  3. 【Python爬虫案例学习20】Python爬虫爬取智联招聘职位信息

    目的:输入要爬取的职位名称,五个意向城市,爬取智联招聘上的该信息,并打印进表格中 ####基本环境配置: Python版本:2.7 开发工具:pycharm 系统:win10 ####相关模块: im ...

  4. (转)python爬虫实例——爬取智联招聘信息

    受友人所托,写了一个爬取智联招聘信息的爬虫,与大家分享. 本文将介绍如何实现该爬虫. 目录 网页分析 实现代码分析 结果 总结 github代码地址 网页分析 以https://xiaoyuan.zh ...

  5. python爬虫实例——爬取智联招聘信息

    受友人所托,写了一个爬取智联招聘信息的爬虫,与大家分享. 本文将介绍如何实现该爬虫. 目录 网页分析 实现代码分析 结果 总结 github代码地址 网页分析 以https://xiaoyuan.zh ...

  6. 克服反爬虫机制爬取智联招聘网站

    一.实验内容 1.爬取网站: 智联招聘网站(https://www.zhaopin.com/) 2.网站的反爬虫机制:     在我频繁爬取智联招聘网站之后,它会出现以下文字(尽管我已经控制了爬虫的爬 ...

  7. python+selenium爬取智联招聘信息

    python+selenium爬取智联招聘信息 需求 准备 代码 结果 需求 老板给了我一份公司名单(大概几百家如下图),让我到网上看看这些公司分别在招聘哪些岗位,通过分析他们的招聘需求大致能推断出我 ...

  8. 深圳python数据分析师招聘_Python爬取智联招聘数据分析师岗位相关信息的方法

    Python爬取智联招聘数据分析师岗位相关信息的方法 发布时间:2020-09-23 23:23:12 来源:脚本之家 阅读:88 进入智联招聘官网,在搜索界面输入'数据分析师',界面跳转,按F12查 ...

  9. python爬去智联招聘网_Python爬虫爬取智联招聘(进阶版)

    点击上方"程序人生",选择"置顶公众号" 第一时间关注程序猿(媛)身边的故事 图片:Westworld Season 2 作者 王强 简介 Python追随者, ...

最新文章

  1. UI设计培训之设计中的点线面-面
  2. 区别:电感、磁珠和零欧电阻的作用
  3. SAP UI5 初学者教程之十 - 什么是 SAP UI5 应用的描述符 Descriptor 试读版
  4. jquery特效(6)—判断复选框是否选中进行答题提示
  5. Flutter UiKitView 嵌入iOS原生View
  6. powershell.exe直接运行命令
  7. 在eclipse中搭建struts2框架的详细过程
  8. 安装JAVA文件被删_Android 删除无用Java文件
  9. php中session总结,PHP中SESSION使用中的一点经验总结
  10. Polar Si9000如何选择模型计算射频线宽?
  11. 浮点数详解(一篇彻底学通浮点数)
  12. python爬取网站小说并下载实例
  13. 计算机组装评分标准,计算机组装与配置技能竞赛评分标准表.doc
  14. error: C2679
  15. 手机app开发用的是什么语言?有哪些优势?
  16. blackarch Linux(暗黑Linux)的下载与安装
  17. 黑客盗走《加勒比海盗5》片源?原来是空手套白狼
  18. 小菜鸟的第一个爬虫:豆瓣爬取电影信息
  19. ToB 产品拆解—Temu 商家管理后台
  20. CSC7158 应用注意事项

热门文章

  1. 启动定时器t0的工作指令是_看门狗的工作原理、应用和设计思路
  2. html段落颜色字体字号,(前端)html与css,css 5、颜色、字体、字号量取方式
  3. Python 中浅拷贝的四种实现方法
  4. python内置函数map reduce filter详解,面试必备知识
  5. Python面向对象反射,双下方法
  6. Python assert 断言函数
  7. php显示错误内容为空,检查文件夹是否为空输出错误(PHP)
  8. java编程button_以编程方式在Java Swing中单击GUIbutton
  9. 如何正确清理C盘中DriverStore文件夹中文件?
  10. python bytes()函数