1. 程式人生 > >python爬蟲(6)——正則表達式(三)

python爬蟲(6)——正則表達式(三)

dpa 方法 d+ 調用 我只 open write pid dump

    下面,我再寫一個例子,加強對正則表達式的理解。還是回到我們下載的那個二手房網頁,在實際中,我們並不需要整個網頁的內容,因此我們來改進這個程序,對網頁上的信息進行過濾篩選,並保存我們需要的內容。打開chrome瀏覽器,右鍵檢查。

技術分享圖片

    

    在網頁源碼中找到了我們所需要的內容。為了調試程序,我們可以在 http://tool.oschina.net/regex/ 上測試編譯好的正則表達式。

    對於 houseinfo:pattern=r‘ data-el="region">(.+?)</div>‘

    對於 price:pattern=r‘<div class="totalPrice"><span>\d+</span>萬‘

技術分享圖片技術分享圖片

    我們用正則提取的內容是有冗余部分的,可以聯想到用切片的方法處理提取內容。上源碼:

 1 from urllib import request
 2 import re
 3 
 4 def HTMLspider(url,startPage,endPage):
 5     
 6     #作用:負責處理URL,分配每個URL去發送請求
 7     
 8     for page in range(startPage,endPage+1):
 9         filename="" + str(page) + "頁.html"
10     
11         #組合為完整的url
12 fullurl=url + str(page) 13 14 #調用loadPage()發送請求,獲取HTML頁面 15 html=loadPage(fullurl,filename) 16 17 18 19 def loadPage(fullurl,filename): 20 #獲取頁面 21 response=request.urlopen(fullurl) 22 Html=response.read().decode(utf-8) 23 #print(Html) 24 25 #
正則編譯,獲取房產信息 26 info_pattern=rdata-el="region">(.+?)</div> 27 info_list=re.findall(info_pattern,Html) 28 #print(info_list) 29 #正則編譯,獲取房產價格 30 price_pattern=r<div class="totalPrice"><span>\d+</span>萬 31 price_list=re.findall(price_pattern,Html) 32 #print(price_list) 33 34 writePage(price_list,info_list,filename) 35 36 37 38 39 def writePage(price_list,info_list,filename): 40 """ 41 將服務器的響應文件保存到本地磁盤 42 """ 43 list1=[] 44 list2=[] 45 for i in price_list: 46 i=-------------->>>>>Price: + i[30:-8] + 47 list1.append(i) 48 #print(i[30:-8]) 49 for j in info_list: 50 j=j.replace(</a>, *10) 51 j=j[:10] + *5 + ---------->>>>>Deatil information: + j[10:] + *5 52 list2.append(j) 53 #print(j) 54 55 for each in zip(list2,list1): 56 print(each) 57 58 59 60 print("正在存儲"+filename) 61 #with open(filename,‘wb‘) as f: 62 # f.write(html) 63 64 65 print("--"*30) 66 67 68 if __name__=="__main__": 69 #輸入需要下載的起始頁和終止頁,註意轉換成int類型 70 startPage=int(input("請輸入起始頁:")) 71 endPage=int(input("請輸入終止頁:")) 72 73 url="https://sh.lianjia.com/ershoufang/" 74 75 HTMLspider(url,startPage,endPage) 76 77 print("下載完成!")

    這是程序運行後的結果。我只是將其打印在終端,也可以使用json.dumps(),將爬取到的內容保存到本地中。

    實際上這種數據提取還有其他方法,這將在以後會講到。

技術分享圖片

python爬蟲(6)——正則表達式(三)