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标准库与第三方库详解
Jul 22 Python
Python中对象迭代与反迭代的技巧总结
Sep 17 Python
Python字符串格式化%s%d%f详解
Feb 02 Python
Python实现快速计算词频功能示例
Jun 25 Python
pygame游戏之旅 调用按钮实现游戏开始功能
Nov 21 Python
如何使用Python实现自动化水军评论
Jun 26 Python
python将类似json的数据存储到MySQL中的实例
Jul 12 Python
通过python扫描二维码/条形码并打印数据
Nov 14 Python
pytorch 准备、训练和测试自己的图片数据的方法
Jan 10 Python
Python3.6 中的pyinstaller安装和使用教程
Mar 16 Python
完美解决keras 读取多个hdf5文件进行训练的问题
Jul 01 Python
PyQt5爬取12306车票信息程序的实现
May 14 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显示搜索引擎来的关键词
2014/02/13 PHP
Laravel 5框架学习之Eloquent 关系
2015/04/09 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
2017/06/02 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
JavaScript与Div对层定位和移动获得坐标的实现代码
2010/09/08 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
2014/02/13 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
2015/02/06 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
js确认框confirm()用法实例详解
2016/01/07 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
2016/06/07 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
jQuery实现动态文字搜索功能
2017/01/05 Javascript
ReactJs设置css样式的方法
2017/06/08 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
详谈构造函数加括号与不加括号的区别
2017/10/26 Javascript
vue 组件中slot插口的具体用法
2018/04/03 Javascript
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
Angular使用cli生成自定义文件、组件的方法
2018/09/04 Javascript
react-native 实现购物车滑动删除效果的示例代码
2021/01/15 Javascript
python基础教程之字典操作详解
2014/03/25 Python
python实现telnet客户端的方法
2015/04/15 Python
python利用高阶函数实现剪枝函数
2018/03/20 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
2018/06/04 Python
详解python中Numpy的属性与创建矩阵
2018/09/10 Python
Python lambda表达式用法实例分析
2018/12/25 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
关于 HTML5 的七个传说小结
2012/04/12 HTML / CSS
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
负责人任命书范本
2014/06/04 职场文书
工作批评与自我批评范文
2014/10/16 职场文书
致运动员的广播稿
2015/08/19 职场文书