爬虫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都是我每天必用的工具,而且两 ...
最新文章
- ipad无法与itunes同步,提示因为这台电脑不再被授权使用在此ipad上购买的项目解决方案...
- AUTOVC: Zero-Shot Voice Style Transfer with Only Autoencoder Loss笔记
- Python基础:第一个Python程序(2)
- 编程学习初体验(4. 编程的核心)
- 本地git首次连接远程github仓库
- Boost.Python Tutorial
- [渝粤教育] 西北工业大学 机械原理 参考 资料
- java moneyutils_java中每月等额与先息后本计算
- 你的个人信息是如何被盗走的?MySQL脱库,脱库的原理,怎么脱库,脱库的步骤,一库三表六字段
- linux 联合编译,在Linux上编译UEFI SDK 2018/OVMF的方法
- 管壁式换热器cad图纸_一文详解换热器技术问答,真的都是珍藏版!
- 在存储过程中动态创建临时表
- 独立之精神,自由之思想
- 【HTCVR】VRTK插件模块功能分析之传送移动(二)
- Win7 easy connect 提示:选路连接失败,可能当前连接网络异常,请稍后重试
- Druid 介绍和应用
- RPA初级认证直通车,不懂代码也能成为技术大佬
- 区块链中的merkle树有何作用?
- 【Python】使用Docker部署Python项目
- 2017年阿里Java面试基础题
热门文章
- python 中 yield 的使用
- Linux 系统调用 Ptrace 详解
- Microsoft Visual Studio Code
- Linux 文件 IO
- .pfx 证书和 .cer 证书
- PostgreSQL 分页——示例
- mysql 半同步 配置_Mysql 半同步复制配置
- C#灰度图转伪彩色图
- leetcode 贪心_贪心算法:给我最好的,现在就要!
- java执行python返回null_[转]java调用python脚本以及通过Process.waitFor()直接调用python模块返回错误代码1的一种解决办法...