日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2024/7/23 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫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爬虫的封装了的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。