【Python爬虫实战】多线程爬虫---糗事百科段子爬取
- 多线程爬虫:即程序中的某些程序段并行执行,
合理地设置多线程,可以让爬虫效率更高
糗事百科段子普通爬虫和多线程爬虫
分析该网址链接得出:
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爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...
- 转 Python爬虫实战一之爬取糗事百科段子
静觅 » Python爬虫实战一之爬取糗事百科段子 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致 ...
- [爬虫]用python的requests模块爬取糗事百科段子
虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “HTTP for Humans”,说明使用更 ...
- Python爬虫爬取糗事百科段子内容
参照网上的教程再做修改,抓取糗事百科段子(去除图片),详情见下面源码: #coding=utf-8#!/usr/bin/pythonimport urllibimport urllib2import ...
- python学习(十六)写爬虫爬取糗事百科段子
原文链接:爬取糗事百科段子 利用前面学到的文件.正则表达式.urllib的知识,综合运用,爬取糗事百科的段子先用urllib库获取糗事百科热帖第一页的数据.并打开文件进行保存,正好可以熟悉一下之前学过 ...
- 8.Python爬虫实战一之爬取糗事百科段子
大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧.那么这次为大家带来,Python爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...
- Python爬虫实战之爬取糗事百科段子
首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致之前的代码没法用了,会导致无法输出和CPU占用过高的 ...
- Python爬虫实战之爬取糗事百科段子【华为云技术分享】
首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致之前的代码没法用了,会导致无法输出和CPU占用过高的 ...
- 芝麻HTTP:Python爬虫实战之爬取糗事百科段子
首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致之前的代码没法用了,会导致无法输出和CPU占用过高的 ...
随机推荐
- 文件上传失败 -nginx报错 client intended to send too large body: 1331696 bytes
location / { root /data/fastdfs/data; include gzip.conf; ngx_fastdfs_module; client_max_body_size 10 ...
- piwik优化之定时任务生成统计数据
piwik的ui界面,使用起来是无比的慢,让苏南大叔不得不对比wordpress的使用体验.当然了,如果你的服务器足够强大,这些都是小事儿.官方对此给出了一系列的优化建议,大家可以读一下:https: ...
- python 中变量引用问题
普通变量,如a=10,str="fdaf",它们在函数内的值是不会被带到函数外的,除非在函数内加上global,而引用是惰性原则,从最近的同名父级同名变量引用值 其它变量如列表,字 ...
- mysql编译安装(详细)(转载)
mysql编译安装(详细) 一.编译安装MySQL前的准备工作 安装编译源码所需的工具和库 yum install gcc gcc-c++ ncurses-devel perl 安装cmake,从 ...
- .net4.0、.net4.5、.net4.6 三者对系统的要求
net4.0 支持的操作系统 Windows 7, Windows 7 Service Pack 1, Windows Server 2003 Service Pack 2, Windows Serv ...
- [蓝桥杯]ALGO-86.算法训练_矩阵乘法
问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...
- android 退出程序解决内存释放so的问题
做Android程序的时候发现一个问题,由于用到了so库,当应用程序退出了,但是手机变得很卡,点击"设置"查看应用程序,界面显示着可以点击"强制关闭". 由于这 ...
- STL基础--String
String 构造 string s1("Hello"); string s2("Hello", 3); //s2: Hel string s3(s1, 2); ...
- bzoj 4811: [Ynoi2017]由乃的OJ
树链剖分,用zkw线段树维护每条链两个方向上对每一位的变换情况,由于位数较少,可以用两个unsigned long long表示 #include<cstdio> typedef unsi ...
- mysql 5.6 binlog组提交实现原理(转载)
http://blog.itpub.net/15480802/viewspace-1411356/ Redo组提交 Redo提交流程大致如下 lock log->mutex write redo ...