爬虫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()
好了。就这样。最后配合下载和保存数据库
爬虫python软件准备_工具准备的差不多了,接下来就是python爬虫的封装了相关推荐
- python软件工程师_为什么每个软件工程师都应该学习Python?
python软件工程师 大家好,如果您经常关注我的博客 ,或者在HackerNoon上阅读我的文章,那么您可能想知道为什么我要写一篇文章告诉人们学习Python ? 几年前,我不是要您更喜欢Java吗 ...
- python爬虫抓收费图片_简单的抓取淘宝图片的Python爬虫
写了一个抓taobao图片的爬虫,全是用if,for,while写的,比较简陋,入门作品. 从网页http://mm.taobao.com/json/request_top_list.htm?type ...
- 420集的python教程视频_阿里达摩院推的420集的python教程高清版,据说懂中文就能入门...
阿里达摩院推的400集的python教程高清版,据说懂中文就能入门 小编的内心是强大的,网友虐我千百遍,我待网友如初恋,因为今天又给大家带来了干货,Python入门教程完整版,完整版啊!完整版! 为了 ...
- python刷火车票_五一要来了,教你用Python动刷新抢12306火车票,附源码
2020年时间飞逝,转眼间马上要到五一了,还在为抢不到火车票发愁吗?作为程序员的我们撸一个抢票软件可好? ... 难以想象的数据, 预示着今年春运回程和返程车票 购买难度将进一步加大... 抢购车票怕 ...
- python orm库_周边生态贡献者+1,一个TDengine的Python ORM库—crown
本文介绍了一个用于操作TDengine的 Python ORM库.本文的预期读者是,需要使用Python语言操作TDengine数据库的开发人员. 什么是ORM? ORM就是对象关系映射(Object ...
- python原理视频教程_让你见识一下什么叫真正的Python学习路线+系统的视频教程...
虽说年年都在喊互联网寒冬,最难就业季,但是今年确实有点不一样,年前年后一波又一波互联网公司宣布"人员调整,结构优化", 这是往年没发生过的. 是不是面试机会就少了很多呢?不是的. ...
- python简单编程语言_功能强大而又简单易学的编程语言Python
Python是一种面向对象.直译式计算机程序设计语言,也是一种功能强大的通用型语言(维基百科).自从上次写那个批量Blast小程序的时候接触了Python,发现这个玩意儿真是好用,后来还用它弄了个动态 ...
- python装逼_能够让你装逼的10个Python小技巧
列表推导式 你有一个list: bag = [1, 2, 3, 4, 5] 现在你想让所有元素翻倍,让它看起来是这个样子: [2, 4, 6, 8, 10] 大多初学者,根据之前语言的经验会大概这样来 ...
- excel运行python自定义函数_终于,可以在Excel中直接使用Python!
大家好,我是早起. 经常给大家推荐好用的数据分析工具,也收到了铁子们的各种好评.这次也不例外,我要再推荐一个,而且是个爆款神器. Excel和Jupyter Notebok都是我每天必用的工具,而且两 ...
最新文章
- 【CV】吴恩达机器学习课程笔记第17章
- angular元素属性绑定_【Angular】表单
- python----面向对象:1类的定义
- Android解决ScrollView中的滑动效果导致GestureDetector中的OnFling不能正常工作问题
- c++ 两个多边形区域重叠_2018 年英国中级数学挑战赛中的多边形问题
- 剩余 大小 查看内存_谈谈内存压缩那些事
- 快速转 TypeScript 指南
- java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
- 乐高叉车wedo教案_乐高wedo20课程教案
- golang 腾讯通用OCR 文字识别 Api 调用
- 给年轻工程师的10大忠告
- keil无法选择单片机类型的问题
- Span 有多强大?玩转各种文字特效
- C语言入门:华氏温度转换为摄氏温度
- 通过雪花(snowflake)算法用Python实现一个简单的发号器
- 小马2K3PE永久珍藏版|
- html5怎么让字跟图片对齐,css怎么将字和图对齐
- python12306抢学生票票下载,基于Python3.6+splinter实现自动抢火车票
- 《中国垒球》:跨界互动·全明星赛
- 设计模式--工厂模式
热门文章
- python---aiohttp库
- QT中的QTableView+QTableWidget
- 容斥原理---概念介绍
- resnet系列+mobilenet v2+pytorch代码实现
- 检测系列--YOLO系列
- 基于 frida 实现的逆向工具包 hooker
- 简明 Python 教程学习笔记_7_文件操作(os、shutil、pathlib )
- android x86 笔记本卡屏,笔记本死机卡屏怎么办
- 二叉堆时间复杂度 php,二叉堆(Binary Heap)
- 计算机一级考试题组成,计算机一级考试试题汇总