Python多线程爬虫实战_爬取糗事百科段子的实例


Posted in Python onDecember 15, 2017

多线程爬虫:即程序中的某些程序段并行执行,

合理地设置多线程,可以让爬虫效率更高

糗事百科段子普通爬虫和多线程爬虫

分析该网址链接得出:

https://www.qiushibaike.com/8hr/page/页码/

多线程爬虫也就和JAVA的多线程差不多,直接上代码

'''
#此处代码为普通爬虫
import urllib.request
import urllib.error
import re
headers = ("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36")
opener = urllib.request.build_opener()
opener.addheaders = [headers]
urllib.request.install_opener(opener)
for i in range(1,2):
 url = "https://www.qiushibaike.com/8hr/page/"+str(i)+"/"
 pagedata = urllib.request.urlopen(url).read().decode("utf-8","ignore")
 pattern = '<div class="content">.*?<span>(.*?)</span>(.*?)</div>'
 datalist = re.compile(pattern,re.S).findall(pagedata)
 for j in range(0,len(datalist)):
  print("第"+str(i)+"页第"+str(j)+"个段子内容是:")
  print(datalist[j])
'''
'''
#此处为多线程介绍代码
import threading #导入多线程包
class A(threading.Thread): #创建一个多线程A
 def __init__(self):  #必须包含的两个方法之一:初始化线程
  threading.Thread.__init__(self)
 def run(self):   #必须包含的两个方法之一:线程运行方法
  for i in range(0,11):
   print("我是线程A")
class B(threading.Thread): #创建一个多线程A
 def __init__(self):  #必须包含的两个方法之一:初始化线程
  threading.Thread.__init__(self)
 def run(self):   #必须包含的两个方法之一:线程运行方法
  for i in range(0,11):
   print("我是线程B")
t1 = A() #线程实例化
t1.start() #线程运行
t2 = B()
t2.start()
'''

#此处为修改后的多线程爬虫
#使用多线程进行奇偶页的爬取
import urllib.request
import urllib.error
import re
import threading
headers = ("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36")
opener = urllib.request.build_opener()
opener.addheaders = [headers]
urllib.request.install_opener(opener)
class one(threading.Thread): #爬取奇数页内容
 def __init__(self):
  threading.Thread.__init__(self)
 def run(self):
  for i in range(1,12,2):
   url = "https://www.qiushibaike.com/8hr/page/"+str(i)+"/"
   pagedata = urllib.request.urlopen(url).read().decode("utf-8","ignore")
   pattern = '<div class="content">.*?<span>(.*?)</span>(.*?)</div>'
   datalist = re.compile(pattern,re.S).findall(pagedata)
   for j in range(0,len(datalist)):
    print("第"+str(i)+"页第"+str(j)+"段子内容为:")
    print(datalist[j])

class two(threading.Thread): #爬取奇数页内容
 def __init__(self):
  threading.Thread.__init__(self)
 def run(self):
  for i in range(2,12,2):
   url = "https://www.qiushibaike.com/8hr/page/"+str(i)+"/"
   pagedata = urllib.request.urlopen(url).read().decode("utf-8","ignore")
   pattern = '<div class="content">.*?<span>(.*?)</span>(.*?)</div>'
   datalist = re.compile(pattern,re.S).findall(pagedata)
   for j in range(0,len(datalist)):
    print("第"+str(i)+"页第"+str(j)+"段子内容为:")
    print(datalist[j])
t1 = one()
t2 = two()
t1.start()
t2.start()

以上这篇Python多线程爬虫实战_爬取糗事百科段子的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python和GO语言实现的消息摘要算法示例
Mar 10 Python
Python的Bottle框架中实现最基本的get和post的方法的教程
Apr 30 Python
Python编程中归并排序算法的实现步骤详解
May 04 Python
对Tensorflow中的矩阵运算函数详解
Jul 27 Python
Python 访问限制 private public的详细介绍
Oct 16 Python
python单线程下实现多个socket并发过程详解
Jul 27 Python
Django框架组成结构、基本概念与文件功能分析
Jul 30 Python
django多种支付、并发订单处理实例代码
Dec 13 Python
pandas中ix的使用详细讲解
Mar 09 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
Mar 13 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
Jul 09 Python
python脚本框架webpy的url映射详解
Nov 20 Python
python导入csv文件出现SyntaxError问题分析
Dec 15 #Python
python matplotlib中文显示参数设置解析
Dec 15 #Python
MAC中PyCharm设置python3解释器
Dec 15 #Python
Python通过matplotlib画双层饼图及环形图简单示例
Dec 15 #Python
python绘制双柱形图代码实例
Dec 14 #Python
Python实现一个Git日志统计分析的小工具
Dec 14 #Python
用matplotlib画等高线图详解
Dec 14 #Python
You might like
域名和cookie问题(域名后缀)
2012/10/10 PHP
php常用数组函数实例小结
2016/12/29 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
详解php反序列化
2020/06/10 PHP
六款帮助你实现惊艳视差滚动效果的jQuery插件
2012/09/14 Javascript
js分页代码分享
2014/04/28 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
2014/05/21 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
2014/09/03 Javascript
一个检测表单数据的JavaScript实例
2014/10/31 Javascript
使用script的src实现跨域和类似ajax效果
2014/11/10 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
2015/03/04 Javascript
javascript实现tab切换的两个实例
2015/11/05 Javascript
JavaScript中三种异步上传文件方式
2016/03/06 Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
2017/04/11 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
vue 中固定导航栏的实例代码
2019/11/01 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
vue常用高阶函数及综合实例
2021/02/25 Vue.js
Windows系统下安装Python的SSH模块教程
2015/02/05 Python
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
Python语法快速入门指南
2015/10/12 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
2016/02/19 Python
Python中对象迭代与反迭代的技巧总结
2016/09/17 Python
Python多线程扫描端口代码示例
2018/02/09 Python
Python中的 enum 模块源码详析
2019/01/09 Python
python pcm音频添加头转成Wav格式文件的方法
2019/01/09 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
用python制作个视频下载器
2021/02/01 Python
路由表示做什么用的?在linux环境中怎么来配置一条默认路由?
2013/06/07 面试题
关爱老人标语
2014/06/21 职场文书
社区文艺活动方案
2014/08/19 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
一份文言文检讨书
2014/09/13 职场文书
关于springboot配置druid数据源不生效问题(踩坑记)
2021/09/25 Java/Android
Python 正则模块详情
2021/11/02 Python