最近幾天有個網貸黑名單(http://www.p2pblack.com)的網站挺火,剛好有學習Python的打算,於是拿這個網站練手,抓取該網站發布的“老賴資訊”。
新手學習,很多地方寫的不好,記錄一下,順便求大神指點一下Regex的書寫,我寫的Regex太複雜,感覺應該有更簡單的方式實現。
代碼如下:
#-*- coding: utf-8 -*- import urllib2import urllibimport reclass p2pBlack: def __init__(self): #預設每頁顯示20條記錄 self.showCount=20 #網站根目錄,用於拼接擷取到的url self.basePath="http://www.p2pblack.com" #列表頁url self.listUrl="http://www.p2pblack.com/cheat/frontDeadBeatList.html?currentPage=1&showCount=" #擷取列表頁 def getHtml(self,count): url=self.listUrl+str(count) req=urllib2.Request(url) response=urllib2.urlopen(req) page=response.read() unicodePage=page.decode("utf-8") return unicodePage #擷取總條數,加入url中,方便直接查詢全部 def getCount(self): unicodePage = self.getHtml(self.showCount); count=re.findall('<font color=red>(.*?)</font>', unicodePage, re.S) self.showCount=count[0] return self.showCount #擷取所有記錄的詳情url def getAllUrl(self):# count=self.getCount()# dif=int(count)-1692# if dif>0:# count=dif# unicodePage=self.getHtml(count) unicodePage=self.getHtml(20) urlList = re.findall('<a href=\"(/cheat/showDetail.html.*?)\".*?>',unicodePage,re.S|re.I) return urlList #擷取詳情頁 def getDetail(self,url): req=urllib2.Request(url) response=urllib2.urlopen(req) page=response.read() unicodePage=page.decode("utf-8") return unicodePage #遍曆所有記錄的詳情,並進入詳情頁抓取資料 def forRecodr(self): recList=self.getAllUrl() for i in range(len(recList)): detailUrl=self.basePath+recList[i] detail=self.getDetail(detailUrl) #取出編號等資訊id相關資訊 detidP=re.findall('<p.*?class="ft_publick_bh">(.*?)</p>', detail, re.S) detid=re.findall('.*?<span>(.*?)</span>.*?<span.*?class="ft_publick_jicu">(.*?)</span>.*?',detidP[0],re.S) #取出欠債人基本資料 detinfodiv=re.findall('<div.*?class="ft_publick_pzxxright ft_publick_pzxxrightss">(.*?)</div>', detail, re.S) detinfo=re.findall('<p>.*?<span>(.*?)</span>.*?<span>(.*?)</span>.*?</p>', detinfodiv[0], re.S) #列印資訊 for i in range(len(detid)): print detid[i][0]+detid[i][1] for i in range(len(detinfo)): #最後一行記錄為照片 if i==len(detinfo)-1: if detinfo[i][1]: imgurl=re.findall('<img.*?src="(.*?)".*?style="max-width: 100px;" />', detinfo[i][1], re.S) imgurls='' for j in range(len(imgurl)): imgurls=imgurls+imgurl[j]+'\n' if imgurl[j]!='null': #擷取照片名稱與尾碼 imgname=imgurl[j].split('/')[-1] #儲存照片到本地 urllib.urlretrieve(imgurl[j],'F://p2pimages/'+imgname) else: print detinfo[i][0]+detinfo[i][1] p2p=p2pBlack()print '開始查詢資料,請稍後......'p2p.forRecodr()print '\n查詢完畢。'
在抽取編號和欠款人基本資料的時候,Regex我用了兩次,一次抓取我試了幾次實現效果都不好,還望有大神可以指點一下。 現在代碼只是將記錄抓取出來並且列印,接下來在研究存入資料庫相關的代碼。大概看了下,網上關於windows下Python安裝mysqlDB的教程寫的基本都很亂。