Python3爬虫与多线程

文章来源:企鹅号 - 你收到一封新邮件

本文按如下内容组织:

# 介绍这个爬虫的目的、模块,创造原始单线程爬虫

# 对这个爬虫进行改造,创造多线程爬虫

一、爬虫功能介绍

文章标题取的是《Python爬虫与多线程》,而不是《Python多线程爬虫》,因为爬虫的目的是为了获取数据而非炫技。即使没有多线程,单线程的爬虫也可以完成任务,大不了电脑不关放一夜跑(做量化回测中常有的事)。

下面就介绍这个爬虫的功能,是用来爬取https://quantocracy.com/所有帖子的标题、描述、网址、发布时间,分别对应数据库的四个字段:title、description、url、time。

这个网站的结构非常简单,所以爬虫的逻辑也比较简单:

下面依次介绍代码的实现逻辑:

(1)构造出一页的url,比如https://quantocracy.com/?pg=1,使用自定义的get_html函数获得html内容:

(2)使用Beautiful库解析内容,获得我们需要的信息。通过chrome的审查元素功能可以发现,网页的结构如下图:

加粗的标签是含有信息的标签,所以我们用tags = soup.find_all('div',attrs={'class':'qo-content-col'})找到所有的div标签,每页可以得到五十个标签。

下面使用自定义的get_info函数对每个标签做子解析:

(3)将信息存储到本地文件或数据库。

上述步骤(2)返回了一条[title, description, url, time]的信息,然后不断把这条信息append到results列表中,就得到了所有信息。当循环完所有页面时,我们可以把results转成pd.DataFrame,然后存储到本地csv。

以上,我们实现了一个功能完整的单线程爬虫,耗时在十几分钟。第二部分讨论可以在哪些环节降低延迟。

二、多线程爬虫

上文的爬虫流程:获取页面 -> 解析页面 -> 数据存储,在这些环节中的耗时分别是:

(1)获取页面,由于网络延迟,一页通常需要1-2s,这是最主要的延迟;

(2)数据存储,由于是存储到本地数据库,速度较快。

下面考虑怎么降低延迟:

(1)创建一个Consumer类和多个实例,用于对每个页面的获取、解析和存储。

(2)用一个队列Queue对象,来实现Consumer类不断获取网址。

代码逻辑如下:

先产生所有url,put进队列;

然后产生八个消费者,用于不断从队列中取出网址,进行获取、解析和存储;

所有信息存储到内存中,然后批量存储到数据库或csv。

这个流程下来,有八个worker并行工作,所以效率提升很多。

Consumer类的代码如下:

三、最后呈现的数据长这样:

Python3爬虫与多线程相关推荐

  1. python3爬虫之多线程爬取英雄联盟所有皮肤图片

    python3爬虫之多线程爬取英雄联盟所有皮肤图片 线程不要太高,容易出错,大约用时1分钟左右. import requests import json import os import thread ...

  2. python3多线程异步爬虫_python3爬虫中多线程进行解锁操作实例

    生活中我们为了保障房间里物品的安全,所以给门进行上锁,在我们需要进入房间的时候又会重新打开.同样的之间我们讲过多线程中的lock,作用是为了不让多个线程运行是出错所以进行锁住的指令.但是鉴于我们实际运 ...

  3. python3爬虫系列16之多线程爬取汽车之家批量下载图片

    python3爬虫系列16之多线程爬取汽车之家批量下载图片 1.前言 上一篇呢,python3爬虫系列14之爬虫增速多线程,线程池,队列的用法(通俗易懂),主要介绍了线程,多线程,和两个线程池的使用. ...

  4. python爬虫网络数据包_Python爬虫之多线程图虫网数据爬取(十六)

    Python爬虫之多线程图虫网数据爬取(十六) 发布时间:2019-05-14 10:11, 浏览次数:289 , 标签: Python 原创不易,转载前请注明博主的链接地址:Blessy_Zhu h ...

  5. python爬虫多线程是什么意思_python爬虫中多线程的使用详解

    queue介绍 queue是python的标准库,俗称队列.可以直接import引用,在python2.x中,模块名为Queue.python3直接queue即可 在python中,多个线程之间的数据 ...

  6. python爬虫动态数据获取_爬虫系列(9)爬虫的多线程理论以及动态数据的获取方法。...

    NO·1 爬虫之多线程 1. 引入我们之前写的爬虫都是单个线程的?这怎么够?一旦一个地方卡到不动了,那不就永远等待下去了?为此我们可以使用多线程或者多进程来处理. 不建议你用这个,不过还是介绍下了,如 ...

  7. python3 爬虫回忆录

    整理于2020年11月下旬: It is tough today and tomorrow will be tougher.but the day after tomorrow is beautifu ...

  8. python3爬虫及数据分析_Python3爬虫及可视化数据分析系列图文教程——大纲目录...

    本文首发于:Python3爬虫及可视化数据分析系列图文教程--大纲目录 - Python量化投资​www.lizenghai.com 写在最前 最近更新:2019-03-28 本教程所有源码见文尾. ...

  9. Python|并发编程|爬虫|单线程|多线程|异步I/O|360图片|Selenium及JavaScript|Scrapy框架|BOM 和 DOM 操作简介|语言基础50课:学习(12)

    文章目录 系列目录 原项目地址 第37课:并发编程在爬虫中的应用 单线程版本 多线程版本 异步I/O版本 总结 第38课:抓取网页动态内容 Selenium 介绍 使用Selenium 加载页面 查找 ...

  10. 基于Python实现的网络爬虫项目——多线程下载小说并保存为txt文件(包含完整代码及注释)

    基于Python实现的网络爬虫项目--多线程下载小说并保存为txt文件(包含完整代码及注释) 一.确立预期目标 二.完成项目所需工具 三.项目需要解决的问题 问题一 问题二 问题三 问题四 问题五 问 ...

最新文章

  1. 33 张图详解 RSTP 、MSTP、替代技术
  2. jax-ws服务使用
  3. Jquery Ajax时 error处理 之 parsererror
  4. Pytorch v0.4.1发布:添加频谱范数,自适应Softmax,优化CPU处理速度,添加异常检测NaN等
  5. 在WINCE5.0开始菜单中添加应用程序
  6. tf.where 用法
  7. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-7底层驱动之滴嗒定时器
  8. QT中IDirect3DDevice9的Present方法失败情况的处理笔记
  9. 国内高校简称撞车史:南大、西大、东大都在争 唯独北大没人抢
  10. SDEBECMSrv服务
  11. oracle 11g rac 状态,Oracle 11g RAC 检查各部分运行状态
  12. 一文详解枚举器和迭代器!
  13. NYOJ--1100--WAJUEJI which home strong!
  14. Office小知识(一)——word插入各种方向和条件个数的大括号{ }
  15. 第三方CNAS验收评测的重要意义
  16. 搭档之家:哭唧唧!暗地较劲得不偿失,美团暂停支付宝后被无情反超
  17. 查询快递单号物流,筛选从某地发出的单号
  18. Matter协议特性解析(一) 支持非Matter协议,私有协议,Matter Bridge技术分析
  19. android app 内嵌h5小游戏
  20. debian7配置apache+mysql+php

热门文章

  1. 计数显示器c语言程序,单片机计数显示器.doc
  2. MCGS洗衣机模拟仿真 组态王洗衣机模拟仿真
  3. CAN总线标准及协议分析
  4. 新手必看的入门编程教程
  5. python+django+mysql多用户B2C商城系统毕业设计毕设开题报告
  6. 数据库和数据库管理系统的区别
  7. HTML文件命名规范大全
  8. 改进的cholesky matlab,矩阵的Cholesky分解的Matlab实现
  9. java计算机毕业设计大学生旅游拼团网站源码+数据库+系统+lw文档+部署
  10. wifi(参数查看工具介绍)--研究(inSSIDer)