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 getopt模块处理命令行选项实例
May 13 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
May 23 Python
Python实现简单过滤文本段的方法
May 24 Python
python中 chr unichr ord函数的实例详解
Aug 06 Python
一行代码让 Python 的运行速度提高100倍
Oct 08 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
Jun 18 Python
Atom Python 配置Python3 解释器的方法
Aug 28 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
Sep 15 Python
keras获得model中某一层的某一个Tensor的输出维度教程
Jan 24 Python
Django 解决distinct无法去除重复数据的问题
May 20 Python
详解Python多线程下的list
Jul 03 Python
python如何操作mysql
Aug 17 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
asp和php下textarea提交大量数据发生丢失的解决方法
2008/01/20 PHP
php数据库抽象层 PDO
2011/05/07 PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
2014/08/28 PHP
PHP实现Soap通讯的方法
2014/11/03 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
2016/03/21 PHP
PHPExcel笔记, mpdf导出
2016/05/03 PHP
基于jQuery的获得各种控件Value的方法
2010/11/19 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
js控制div弹出层实现方法
2015/05/11 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
Vue自定义指令介绍(2)
2016/12/08 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
2016/12/22 Javascript
vue2.0 elementUI制作面包屑导航栏
2018/02/22 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
详解vue组件基础
2018/05/04 Javascript
vue项目部署到Apache服务器中遇到的问题解决
2018/08/24 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
Vue中key的作用示例代码详解
2020/06/10 Javascript
详解Python的数据库操作(pymysql)
2019/04/04 Python
python 同时读取多个文件的例子
2019/07/16 Python
500行代码使用python写个微信小游戏飞机大战游戏
2019/10/16 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
德国自然时尚和有机产品购物网站:Waschbär
2019/05/29 全球购物
西班牙用户之间买卖视频游戏的平台:Wakkap
2020/03/21 全球购物
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
服务行业个人求职的自我评价
2013/12/12 职场文书
电气个人求职信范文
2014/02/04 职场文书
我读书我快乐演讲稿
2014/05/07 职场文书
商业企业管理专业求职信
2014/07/10 职场文书
食品安全承诺书范文
2014/08/29 职场文书
中学生旷课检讨书模板
2014/10/08 职场文书
2014年居委会工作总结
2014/12/09 职场文书
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android