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 ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
Jun 10 Python
bpython 功能强大的Python shell
Feb 16 Python
Python队列的定义与使用方法示例
Jun 24 Python
python+matplotlib实现礼盒柱状图实例代码
Jan 16 Python
浅谈tensorflow中几个随机函数的用法
Jul 27 Python
Python产生Gnuplot绘图数据的方法
Nov 09 Python
Python设计模式之代理模式实例详解
Jan 19 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
Apr 25 Python
Python求解正态分布置信区间教程
Nov 20 Python
Python tkinter布局与按钮间距设置方式
Mar 04 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
Mar 05 Python
Python3基于plotly模块保存图片表格
Aug 03 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
php生成圆角图片的方法
2015/04/07 PHP
简单谈谈favicon
2015/06/10 PHP
JQuery下的Live方法和$.browser方法使用代码
2010/06/02 Javascript
Javascript中的五种数据类型详解
2014/12/26 Javascript
推荐10 款 SVG 动画的 JavaScript 库
2015/03/24 Javascript
js实现简单选项卡与自动切换效果的方法
2015/04/10 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
手机端实现Bootstrap简单图片轮播效果
2016/10/13 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
AngularJS实现路由实例
2017/02/12 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
使用html+js+css 实现页面轮播图效果(实例讲解)
2017/09/21 Javascript
基于jquery实现五星好评
2017/11/18 jQuery
浅谈webpack组织模块的原理
2018/03/10 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
JS中准确判断变量类型的方法
2020/06/01 Javascript
Python open读写文件实现脚本
2008/09/06 Python
Python实现过滤单个Android程序日志脚本分享
2015/01/16 Python
详解Python中类的定义与使用
2017/04/11 Python
TensorFlow变量管理详解
2018/03/10 Python
python3+dlib实现人脸识别和情绪分析
2018/04/21 Python
python实现对输入的密文加密
2019/03/20 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
安装完Python包然后找不到模块的解决步骤
2020/02/13 Python
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
Linux操作面试题
2012/05/16 面试题
在职人员函授期间自我评价分享
2013/11/08 职场文书
公务员试用期满考核材料
2014/05/22 职场文书
司法局火灾防控方案
2014/06/05 职场文书
校园广播站开场白
2015/06/01 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
基于Python的EasyGUI学习实践
2021/05/07 Python
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL
Android 界面一键变灰 深色主题工具类
2022/04/28 Java/Android