Python抓取頁面__Python

來源:互聯網
上載者:User

最近幾天有個網貸黑名單(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的教程寫的基本都很亂。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.