Python多线程爬虫实战_爬取糗事百科段子的实例
作者:Liuyt_61 发布时间:2021-02-15 16:58:21
标签: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()
来源:http://www.cnblogs.com/Liuyt-61/archive/2017/12/14/8040238.html


猜你喜欢
- vue项目无法删除问题今天删除本地的vue项目,一直提示“操作无法完成,因为其中的文件夹或文件已在另一个程序组打开,请关
- 分别针对ie和火狐分别作了对xml文档和xml字符串的解析,所有代码都注释掉了,想看哪部分功能,去掉注释就可以了。至于在ajax环境下解析x
- 撰写时间:2017.5.23一维数组1.numpy初始化一维数组a = np.array([1,2,3]);print a.shape输出的
- 同由其他技术驱动的应用一样,在相同的Web服务器上运行Django应用也是可行的。 最简单直接的办法就是利用Apaches配置文件httpd
- 本文实例为大家分享了python xlsxwriter创建excel图表的具体代码,供大家参考,具体内容如#coding=utf-8 imp
- 例子: rsajax.js: var http_request = false; function makePOSTRequest(url,
- 无论是 DAO 还是 ADO 都有两种从 Recordset 对象中查询记录的方法: Find 方法和 Seek 方法。在这两种方法中可以让
- 记录了Windows安装python3.7的详细过程,供大家参考,具体内容如下1. 在python的官网下载python对应版本:官网地址6
- 在嵌入式、尤其是机器人的python编程中,经常需要实时检测用户的键盘输入来随时控制机器人,这段代码可以帮助我们提取用户输入的字符,并在按下
- 本文实例讲述了php简单实现批量上传图片的方法。分享给大家供大家参考,具体如下:<?phpfunction upload_multi(
- 插件机制是代码/功能反向依赖注入到主体程序的一种方法,编译型语言通过动态加载动态库实现插件。对于Python这样的脚本语言,实现插件机制更简
- 在一些情况下,MySQL可以直接使用索引来满足一个 ORDER BY 或 GROUP BY 子句而无需做额外的排序。尽管 ORDER BY
- 注:本文涉及的是解压缩版的安装安装教程下载mysql地址是:http://dev.mysql.com/downloads/mysql/解压缩
- 这篇文章主要介绍了python装饰器使用实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以
- 1. 原理对于DNA序列,一阶马尔科夫链可以理解为当前碱基的类型仅取决于上一位碱基类型。如图1所示,一条序列的开端(由B开始)可能是A、T、
- 问题介绍棋盘覆盖问题,是一种编程问题。如何应用分治法求解棋盘覆盖问题呢?分治的技巧在于如何划分棋盘,使划分后的子棋盘的大小相同,并且每个子棋
- 前言ORDER BY 字段名 升序/降序,相信进来的朋友都认识这个排序语句,但遇到一些特殊的排序,单单使用字段名就无法满足需求了,下面给大家
- json.dumps将一个Python数据结构转换为JSONimport jsondata = { 'na
- 一、前期准备1、安装好python3,可以在anaconda中安装python3。2、一个合适的双目摄像头。3、一台可以运行Matlab的电
- 本文实例为大家分享了python OpenCV实现答题卡识别判卷的具体代码,供大家参考,具体内容如下完整代码:#导入工具包import nu