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安装教程 Pycharm安装详细教程
May 02 Python
Pycharm 操作Django Model的简单运用方法
May 23 Python
使用 Python 实现微信群友统计器的思路详解
Sep 26 Python
对Python 语音识别框架详解
Dec 24 Python
Python使用修饰器进行异常日志记录操作示例
Mar 19 Python
Django ORM多对多查询方法(自定义第三张表&amp;ManyToManyField)
Aug 09 Python
python @classmethod 的使用场合详解
Aug 23 Python
Python socket连接中的粘包、精确传输问题实例分析
Mar 24 Python
pycharm 关掉syntax检查操作
Jun 09 Python
python 绘制正态曲线的示例
Sep 24 Python
python 列表推导和生成器表达式的使用
Feb 01 Python
Python探索生命起源 matplotlib细胞自动机动画演示
Apr 21 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
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
javascript 限制输入脚本大全
2009/11/03 Javascript
Javascript中的return作用及javascript return关键字用法详解
2015/11/05 Javascript
javascript定义类和类的实现实例详解
2015/12/01 Javascript
浅析BootStrap栅格系统
2016/06/07 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
2017/03/03 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
2017/09/15 Javascript
nodejs 图片预览和上传的示例代码
2017/09/30 NodeJs
canvas绘制爱心的几种方法总结(推荐)
2017/10/31 Javascript
使用 Node.js 开发资讯爬虫流程
2018/01/07 Javascript
vue select二级联动第二级默认选中第一个option值的实例
2018/01/10 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
JS面向对象编程——ES6 中class的继承用法详解
2020/03/03 Javascript
微信小程序调用后台service教程详解
2020/11/06 Javascript
Vue中的nextTick作用和几个简单的使用场景
2021/01/25 Vue.js
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
使用Python脚本操作MongoDB的教程
2015/04/16 Python
Python聊天室程序(基础版)
2018/04/01 Python
Python 删除整个文本中的空格,并实现按行显示
2018/07/24 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
使用python3批量下载rbsp数据的示例代码
2019/12/20 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
什么是python类属性
2020/06/10 Python
Python with语句用法原理详解
2020/07/03 Python
python使用建议与技巧分享(一)
2020/08/17 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
Nuts.com:优质散装,批发坚果、干果和巧克力等
2017/03/21 全球购物
南非最大的花卉和送礼服务:NetFlorist
2017/09/13 全球购物
Tretorn美国官网:瑞典外套和鞋类品牌,抵御风雨
2018/07/19 全球购物
巴西购物网站:Onofre Agora
2020/06/08 全球购物
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
会计毕业生自荐书
2014/06/12 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
大学生简历自我评价2015
2015/03/03 职场文书
上课迟到检讨书
2015/05/06 职场文书