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 时间戳与格式化时间的转化实现代码
Mar 23 Python
Python 制作糗事百科爬虫实例
Sep 22 Python
详解Python3除法之真除法、截断除法和下取整对比
May 23 Python
python 实现屏幕录制示例
Dec 23 Python
Django 自定义权限管理系统详解(通过中间件认证)
Mar 11 Python
Python写捕鱼达人的游戏实现
Mar 31 Python
python使用信号量动态更新配置文件的操作
Apr 01 Python
使用python接受tgam的脑波数据实例
Apr 09 Python
python thrift 实现 单端口多服务的过程
Jun 08 Python
使用python把xmind转换成excel测试用例的实现代码
Oct 12 Python
Python类的继承super相关原理解析
Oct 22 Python
如何用python开发Zeroc Ice应用
Jan 29 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一些常用的正则表达式字符的一些转换
2008/07/29 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
JavaScript中的匀速运动和变速(缓冲)运动详细介绍
2012/11/11 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
node.js中的fs.writeSync方法使用说明
2014/12/15 Javascript
javascript基于DOM实现权限选择实例分析
2015/05/14 Javascript
jQuery实现购物车表单自动结算效果实例
2015/08/10 Javascript
JS实现的页面自定义滚动条效果
2015/10/26 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
AngularJS中watch监听用法分析
2016/11/04 Javascript
Javascript中常用类型的格式化方法小结
2016/12/26 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
Node.JS获取GET,POST数据之queryString模块使用方法详解
2020/02/06 Javascript
JavaScript实现简单的弹窗效果
2020/05/19 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
[01:01:42]Secret vs Optic Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
[50:05]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python基础教程之实现石头剪刀布游戏示例
2014/02/11 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
简述 Python 的类和对象
2020/08/21 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
html5 标签
2009/07/16 HTML / CSS
Giuseppe Zanotti美国官方网站:将鞋履视为高级时装般精心制作
2018/02/06 全球购物
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
生日派对邀请函
2014/01/13 职场文书
上班玩游戏检讨书
2014/02/07 职场文书
2014年元旦活动方案
2014/02/15 职场文书
出纳会计岗位职责
2014/03/12 职场文书
护士个人自我鉴定
2014/03/24 职场文书
市场营销专业毕业生求职信
2014/03/26 职场文书
未受刑事制裁公证证明
2014/09/20 职场文书
学雷锋倡议书
2015/01/19 职场文书
小学体育教学随笔
2015/08/14 职场文书
go 实现简易端口扫描的示例
2021/05/22 Golang