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爬虫的封装了相关推荐

  1. python软件工程师_为什么每个软件工程师都应该学习Python?

    python软件工程师 大家好,如果您经常关注我的博客 ,或者在HackerNoon上阅读我的文章,那么您可能想知道为什么我要写一篇文章告诉人们学习Python ? 几年前,我不是要您更喜欢Java吗 ...

  2. python爬虫抓收费图片_简单的抓取淘宝图片的Python爬虫

    写了一个抓taobao图片的爬虫,全是用if,for,while写的,比较简陋,入门作品. 从网页http://mm.taobao.com/json/request_top_list.htm?type ...

  3. 420集的python教程视频_阿里达摩院推的420集的python教程高清版,据说懂中文就能入门...

    阿里达摩院推的400集的python教程高清版,据说懂中文就能入门 小编的内心是强大的,网友虐我千百遍,我待网友如初恋,因为今天又给大家带来了干货,Python入门教程完整版,完整版啊!完整版! 为了 ...

  4. python刷火车票_五一要来了,教你用Python动刷新抢12306火车票,附源码

    2020年时间飞逝,转眼间马上要到五一了,还在为抢不到火车票发愁吗?作为程序员的我们撸一个抢票软件可好? ... 难以想象的数据, 预示着今年春运回程和返程车票 购买难度将进一步加大... 抢购车票怕 ...

  5. python orm库_周边生态贡献者+1,一个TDengine的Python ORM库—crown

    本文介绍了一个用于操作TDengine的 Python ORM库.本文的预期读者是,需要使用Python语言操作TDengine数据库的开发人员. 什么是ORM? ORM就是对象关系映射(Object ...

  6. python原理视频教程_让你见识一下什么叫真正的Python学习路线+系统的视频教程...

    虽说年年都在喊互联网寒冬,最难就业季,但是今年确实有点不一样,年前年后一波又一波互联网公司宣布"人员调整,结构优化", 这是往年没发生过的. 是不是面试机会就少了很多呢?不是的. ...

  7. python简单编程语言_功能强大而又简单易学的编程语言Python

    Python是一种面向对象.直译式计算机程序设计语言,也是一种功能强大的通用型语言(维基百科).自从上次写那个批量Blast小程序的时候接触了Python,发现这个玩意儿真是好用,后来还用它弄了个动态 ...

  8. python装逼_能够让你装逼的10个Python小技巧

    列表推导式 你有一个list: bag = [1, 2, 3, 4, 5] 现在你想让所有元素翻倍,让它看起来是这个样子: [2, 4, 6, 8, 10] 大多初学者,根据之前语言的经验会大概这样来 ...

  9. excel运行python自定义函数_终于,可以在Excel中直接使用Python!

    大家好,我是早起. 经常给大家推荐好用的数据分析工具,也收到了铁子们的各种好评.这次也不例外,我要再推荐一个,而且是个爆款神器. Excel和Jupyter Notebok都是我每天必用的工具,而且两 ...

最新文章

  1. 【CV】吴恩达机器学习课程笔记第17章
  2. angular元素属性绑定_【Angular】表单
  3. python----面向对象:1类的定义
  4. Android解决ScrollView中的滑动效果导致GestureDetector中的OnFling不能正常工作问题
  5. c++ 两个多边形区域重叠_2018 年英国中级数学挑战赛中的多边形问题
  6. 剩余 大小 查看内存_谈谈内存压缩那些事
  7. 快速转 TypeScript 指南
  8. java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
  9. 乐高叉车wedo教案_乐高wedo20课程教案
  10. golang 腾讯通用OCR 文字识别 Api 调用
  11. 给年轻工程师的10大忠告
  12. keil无法选择单片机类型的问题
  13. Span 有多强大?玩转各种文字特效
  14. C语言入门:华氏温度转换为摄氏温度
  15. 通过雪花(snowflake)算法用Python实现一个简单的发号器
  16. 小马2K3PE永久珍藏版|
  17. html5怎么让字跟图片对齐,css怎么将字和图对齐
  18. python12306抢学生票票下载,基于Python3.6+splinter实现自动抢火车票
  19. 《中国垒球》:跨界互动·全明星赛
  20. 设计模式--工厂模式

热门文章

  1. python---aiohttp库
  2. QT中的QTableView+QTableWidget
  3. 容斥原理---概念介绍
  4. resnet系列+mobilenet v2+pytorch代码实现
  5. 检测系列--YOLO系列
  6. 基于 frida 实现的逆向工具包 hooker
  7. 简明 Python 教程学习笔记_7_文件操作(os、shutil、pathlib )
  8. android x86 笔记本卡屏,笔记本死机卡屏怎么办
  9. 二叉堆时间复杂度 php,二叉堆(Binary Heap)
  10. 计算机一级考试题组成,计算机一级考试试题汇总