爬虫python软件准备_工具准备的差不多了,接下来就是python爬虫的封装了

python爬虫的方便大家都懂的。那么,既然常用,那么我们当然要封装啦。

那么我们可以先封装一个父类的爬虫

我自己的设计想法就是,首先,爬虫必须要有个字段来存储匹配的规则gainRule,然后有个字段存储需要取什么属性outAttr,

然后就是有个需要处理的数据列表gainList,最后是一个存储输出列表数据的outList,和存储输出单条数据的outData

那么这个爬虫的父类定义如下

from bs4 importBeautifulSoupimportrequestsimportreclassSpiderHp:#gainRule页面的解析规则,outAttr页面存储的规则,gainList需要解析的列表页,

def __init__(self,gainRule,outAttr=None,gainList=None):

self.headers= {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"}

self.gainRule=gainRule

self.outAttr=outAttr

self.gainList=gainList

self.req=requests.Session()

self.outList=[]

self.outData=""

#处理列表数据

def startAll(self,gainList=None):ifgainList:

self.gainList=gainListfor url inself.gainList:

self.InitUrlList(url)#处理单页数据

defstart(self,gainData):

self.InitUrlList(gainData)

爬虫的基本功能ok之后。接着我们要定义自己的种类爬虫。

比如我们一般需要一个爬取单个页面,单个特征值的普通爬虫,那么。我们写一个爬虫继承父类

#单页单条数据爬虫

classSpiderSigDataHp(SpiderHp):defInitUrlList(self, url):

reqData= self.req.get(url, headers=self.headers)

soup= BeautifulSoup(reqData.text, "lxml")

nodeList=soup.select(self.gainRule)ifnodeList:ifself.outAttr:

self.outData=nodeList[0].get(self.outAttr)else:

self.outData= nodeList[0]

像这个刚刚定义的爬虫我们一般可以用来爬取分页数量之类的。

接着我们再定义一个专门处理列表页的爬虫

#列表页通用爬虫

classSpiderListHp(SpiderHp):defInitUrlList(self, url):

reqData= self.req.get(url, headers=self.headers)

soup= BeautifulSoup(reqData.text, "lxml")

nodeList=soup.select(self.gainRule)for node innodeList:ifself.outAttr:

data=node.get(self.outAttr)else:

data=nodeif data not inself.outList:

self.outList.append(data)if notnodeList:print("nodelist err",url)

最后再定义一个详情页的爬虫即可

#详情页爬虫

classSpiderDetailHp(SpiderHp):defInitUrlList(self, url):

reqData= self.req.get(url, headers=self.headers)

soup= BeautifulSoup(reqData.text, "lxml")

data={}for key inself.gainRule:

ps=soup.select(self.gainRule[key])ifps:ifself.outAttr[key]:

data[key]=ps[0].get(self.outAttr[key])else:

data[key]=ps[0]

str=repr(data[key])#去掉标签数据。一般如果取到最后还有标签。都是没用的了

data[key]=re.sub("<.+?>","",str)

self.outList.append(data)

这样我们的爬虫就完成了。如果还有其他特殊需求的。可以再自己定义。

一般通过这三种爬虫的组合使用。可以解决大多数网页的捕获。接着我来随便演示下使用。

importSpiderimportre

home="http://www.xxxxxxx.net/" #就不告诉你们我在爬什么了

defmain():

url= home + "hmh/list_6_1.html"num=getPage(url) #获取分页数量

list=[home+"hmh/list_6_{}.html".format(i) for i in range(1,2)]

hlist=getList(list)for i inrange(len(hlist)):

hlist[i]=home+hlist[i]print(hlist[i])

imgList=getDetail(hlist)print(imgList)print(len(imgList))#获取页面的分页数量

defgetPage(url):

gainRule= "span.pageinfo > strong"mgr=Spider.SpiderSigDataHp(gainRule)

mgr.start(url)

str=repr(mgr.outData)#去掉所有的标签的内容

num=int(re.sub("<.+?>","",str))returnnum#获取列表页

defgetList(list):

gainRule= "ul.piclist > li > a"outAttr= "href"mgr=Spider.SpiderListHp(gainRule, outAttr)

mgr.startAll(list)returnmgr.outList#获取详情页信息

defgetDetail(list):

gainData={}

outAttr={}

gainData["image"]="#imgshow > img"gainData["page"]="li.thisclass > a"outAttr["image"]="src"outAttr["page"]=""mgr=Spider.SpiderDetailHp(gainData, outAttr)

mgr.startAll(list)returnmgr.outListif __name__=="__main__":

main()

好了。就这样。最后配合下载和保存数据库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

axure 输入框默认灰色字_Axure如何应对意外关闭

在使用Axure的时候&#xff0c;相信很多朋友都遇到过这样的情况&#xff1a;axure提交的东西都不见了。内容做到一半或者已经快要完成时&#xff0c;软件意外关闭&#xff0c;导致做的内容意外丢失。看着自己的劳动成果就这样浪费了&#xff0c;这种情况真的令人心疼。如果遇到…

计算机图像隐藏信息,学术讲座:杨庆隆-台湾成功大学-基于纠错码的信息隐藏与秘密图像共享...

学术讲座讲座题目:基于纠错码的信息隐藏与秘密图像共享讲座时间&#xff1a;2017.10.27。上午9&#xff1a;30-11&#xff1a;00讲座地点&#xff1a;十教10106讲座讲者&#xff1a;杨庆隆教授讲者简历&#xff1a;杨庆隆&#xff0c;台湾东华大学教授&#xff0c;博士&#xf…

matlaba绘制gps星空图_网络图横道图绘制软件 5.0免锁版告别纯手工绘制,修改工作量大!...

按图片加小编微信今日资料会员专属资料链接链接&#xff1a;https://pan.baidu.com/s/1AZY3cPeEv72GBRfESIwk_w提取码&#xff1a;88B8安装教程&#xff1a;1、下载压缩文件&#xff0c;解压后双击【网络计划V5.exe】&#xff0c;点击立即安装。2、没有替换补丁打开软件是这种情…

xutils找id空指针_xUtils更新到3.0后的基本使用规则

说实话&#xff0c;对于xUtils&#xff0c;是我最近才用到的开发框架(也是刚接触)&#xff0c;对于其功能不得不说&#xff0c;简化了很多的开发步骤&#xff0c;可以说是非常好的开发工具&#xff0c;但是其最近更新到3.0也没有解决加载自定义ImageView报错的问题。我总是喜欢…

xp访问不了win10计算机,如何解决winxp访问win10共享打印机提示凭据不足

在win10的电脑上对着始按钮点鼠标右键&#xff0c;点击运行&#xff0c;或者直接“winR”输入gpedit.msc&#xff0c;点击确定&#xff0c;在本地策略组编辑器中依次点开——计算机配置——windows设置——安全设置——本地策略——安全选项&#xff0c;在右边的列表中找到“网…

centos7 关闭selinux_Devops之LDAP部署安装(centos7+openLDAP+PhpLDAPAdmin)

Devops之LDAP部署安装(centos7openLDAPPhpLDAPAdmin)由于公司部门的需求&#xff0c;需要搭建ldap来统一Devops的用户名和密码&#xff0c;具体的选择LDAP分析在上一篇里&#xff0c;这里主要记录一下部署centos7openLDAPPhpLDAPAdmin来实现Ldap服务&#xff0c;并使用phpldapa…

微信时代计算机教学,互联网+时代技工院校计算机教学方式研究

刘兆慧摘 要&#xff1a;互联网时代的到来让几乎每一个行业的生产经营方式发生巨大变革&#xff0c;教育行业也不可避免。本文就技工院校计算机在互联网时代背景下采取的教学方式进行研究。本次研究采取了实验法、观察法、比较法等研究方法。结果显示&#xff0c;在互联网环境下…

python编写add函数求和_为什么python不利用__iadd__来实现求和和链接运算符?

我刚做了一个有趣的测试&#xff1a;~$python3 # I also conducted this on python 2.7.6, with the same resultPython 3.4.0 (default, Apr 11 2014, 13:05:11)[GCC 4.8.2] on linuxType "help", "copyright", "credits" or "license&quo…

python count函数用法 comm_python3:MySQL 8.0学习笔记(第五部分:单表查询操作)

在讲解单表查询时&#xff0c;首先创建一个emp的员工表&#xff0c;表中字段包括&#xff1a;empno&#xff08;员工编号&#xff09;、ename&#xff08;员工姓名&#xff09;、job&#xff08;员工职位&#xff09;、mgr&#xff08;员工领导&#xff09;、hiredate&#xff…

该计算机没有运行windows无线服务器,老司机示范win7系统诊断提示此计算机上没有运行的windows无线服务的恢复方法...

随着win7系统的普及&#xff0c;大家是否遇到过win7系统诊断提示此计算机上没有运行的windows无线服务的情况&#xff0c;近日就有朋友向我反映win7系统诊断提示此计算机上没有运行的windows无线服务的问题&#xff0c;那么我们应该如何处理win7系统诊断提示此计算机上没有运行…

mysql主库从库在同一台服务器_MySQL数据库的主从配置(多主对一从)

一、实验环境部署主服务器 192.168.18.42 端口3306 》 从服务器 192.168.18.44 端口 3306主服务器 192.168.18.43 端口3306 》 从服务器 192.168.18.44 端口 3307##数据库&#xff0c;已经安装mysql服务&#xff0c;安装部分略。从服务器上的多个mysql实例&#xff0c;请看另…

golang int64转string_(一)Golang从入门到原地起飞

1、Golang 变量定义方法&#xff1a;1&#xff09;定义变量 变量名 类型 表达式var go string "hello" 2&#xff09;在函数内部&#xff0c;可以使用更简略的 : 方式声明并初始化变量。注意&#xff1a;短变量只能用于声明局部变量&#xff0c;不能用于全局变量的…

domino缺省注册服务器或无法访问,Domino服务器挂起时的现象

1。Domino 服务器挂起时的现象&#xff1a;2。Domino 服务器挂起时需要收集的数据&#xff1a;3。Domino 服务器需要在notes.ini中添加的参数&#xff1a;4。有关QNC/Nsd&#xff1a;5。设置Statrep.nsf 的方法&#xff1a;6。有关用Debug_Capture_Timeout1来收集信号灯的数据信…

latex 分页_latex 图片跨页显示问题???

latex 中一个页面有很多图片&#xff0c;超出一页就显示不出来了&#xff1a;请问怎么让后续图片显示在一个新页面中&#xff1f;图片显示代码如下每行显示三张&#xff1a;\begin{figure}\centering\includegraphics[width1.8 in]{images/Fig5_Sample11a.jpg}\quad\includegra…

session传递参数_JWT与Session的比较

如今&#xff0c;越来越多的项目开始采用JWT作为认证授权机制&#xff0c;那么它和之前的Session究竟有什么区别呢&#xff1f;今天就让我们来了解一下。JWT是什么定义JSON Web Token(JWT)是一个开放标准(RFC 7519)&#xff0c;它定义了一种紧凑和自包含的方式&#xff0c;用于…

scp复制本地文件到远程服务器,scp 本地文件到远程服务器

linux中scp命令的使用linux远程拷贝文件命令:scp(scp:secure corp)(1)从本地拷贝文件到远程服务器scp/opt/script/test.pl root192.168.3.130:~/将本地/opt/scritp/文件夹下的test.pl脚本文件拷贝到远程服务器192.168.3.130的用户目录下...文章科技小能手2017-11-12758浏览量li…

keras 分布式_TensorFlow 2.0正式版官宣!深度集成Keras

新智元报道 来源&#xff1a;medium、GitHub编辑&#xff1a;小芹、大明【新智元导读】TensorFlow 2.0正式版终于发布了&#xff01;深度集成Keras&#xff0c;更简单、更易用&#xff0c;GPU训练性能提升。这是一个革命性的新版本&#xff0c;欢迎来到 TensorFlow 2.0&#x…

python定义空列表lt_Pythonlt;1gt;List

list里的元素以逗号隔开&#xff0c;以[]包围&#xff0c;当中元素的类型随意 官方一点的说&#xff1a;list列表是一个随意类型的对象的位置相关的有序集合。 它没有固定的大小(1)。通过对偏移量 (2)进行赋值以及其它各种列表的方法进行调用&#xff0c;可以改动列表的大小。 …

新天龙官网服务器更新消息,新天龙八部怀旧服太火,增开7组服务器不够用,还得继续扩容...

原标题&#xff1a;新天龙八部怀旧服太火&#xff0c;增开7组服务器不够用&#xff0c;还得继续扩容最近《新天龙八部》怀旧服上线的消息&#xff0c;相信各位都有耳闻&#xff0c;作为国产最经典的网游之一&#xff0c;新天龙开怀旧服自然吸引了无数老玩家回归。而且还有很多路…

大疆云台如何使用华为mate20pro_华为Mate30+大疆灵眸Osmo3,让你的照片和短视频称霸朋友圈...

自华为Mate30国内上市以后&#xff0c;短短几天刷爆朋友圈&#xff0c;尤其是Mate30pro现在更是一机难求。华为Mate30pro打造了全球首款4000万像素电影级拍摄手机&#xff0c;华为Mate30pro支持7680帧超慢速摄影&#xff0c;支持4K HDR拍摄&#xff0c;以及双OIS防抖。2019年8月…