python爬蟲(6)——正則表達式(三)
阿新 • • 發佈:2018-02-20
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 #組合為完整的url12 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=r‘data-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)——正則表達式(三)