1. 程式人生 > >python2.7爬蟲實戰(房地產資訊抓取)

python2.7爬蟲實戰(房地產資訊抓取)

import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
import  MySQLdb
import  urllib2
import re
from bs4 import BeautifulSoup
#可改成函式這裡就懶的寫了
for i in range(1,2000):
    #網站URL
urlxx="http://www.lgfdcw.com//cs/index.php?userid=&infotype=&dq=&fwtype=&hx=&price01=&price02=&pricetype=&fabuday=&addr=&PageNo="
+str(i) response = urllib2.urlopen(urlxx) html=response.read() lj=re.compile('<a href="(.*?)".*?target="_blank"><strong>.*?</strong></a>') herflink=re.findall(lj,html)#匹配到想要的連線 lg,lxr,lxdh,sjhm,lxdz,mfxz,xxdz,fwlx,fwhx,fwmj,csjg,fkfs,cqxz,synx,fwxz,zxcd,fwjg,kfzj,creatdt=[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[] #房子詳細資訊陣列,方便mysql儲存
resultinfo=False#定義結束變數 #遍歷跳轉連結,抓取資料。這裡可以改成函式,程式可以清晰化。 for getlink in herflink: #跳轉後URL url="http://www.lgfdcw.com/cs/"+str(getlink) requset=urllib2.Request(url) opencontext=urllib2.urlopen(requset) htmlcontext=opencontext.read() soup=BeautifulSoup(htmlcontext) firsttable=soup.find_all('table'
)[8].find_all('table')[0] #第一部分表,其中包含聯絡人資訊 secondtable=soup.find_all('table')[8].find_all('table')[1] #第二部分表,包含房子詳細資訊 threetable=soup.find_all('table')[12]#第二部分表,房子環境資訊(樓層這些) fbdt=soup.find(color="#009900").string[5:15]#釋出時間 #存在HTML結構不一致的情況,需異常處理 try: lgreg=threetable.find_all('tr')[1].find_all('td')[1].get_text()#房屋樓層 except: lgreg=threetable.find_all('tr')[2].find_all('td')[1].get_text()#房屋樓層 lxrreg=firsttable.find_all('tr')[1].find_all('td')[1].get_text()#聯絡人 lxdhreg=firsttable.find_all('tr')[2].find_all('td')[1].get_text()#聯絡電話 sjhmreg=firsttable.find_all('tr')[3].find_all('td')[1].get_text()#手機號碼 lxdzreg=firsttable.find_all('tr')[4].find_all('td')[1].get_text()#聯絡地址 mfxzreg=secondtable.find_all('tr')[1].find_all('td')[1].get_text()#賣方性質 xxdzreg=secondtable.find_all('tr')[2].find_all('td')[1].get_text()#詳細地址 fwlxreg=secondtable.find_all('tr')[3].find_all('td')[1].get_text()#房屋型別 fwhxreg=secondtable.find_all('tr')[4].find_all('td')[1].get_text()#房屋戶型 fwmjreg=secondtable.find_all('tr')[4].find_all('td')[3].get_text()#房屋面積 csjgreg=secondtable.find_all('tr')[5].find_all('td')[1].get_text()#出售價格 fkfsreg=secondtable.find_all('tr')[5].find_all('td')[3].get_text()#付款方式 cqxzreg=secondtable.find_all('tr')[6].find_all('td')[1].get_text()#產權性質 synxreg=secondtable.find_all('tr')[6].find_all('td')[3].get_text()#使用年限 fwxzreg=secondtable.find_all('tr')[7].find_all('td')[1].get_text()#房屋性質 zxcdreg=secondtable.find_all('tr')[7].find_all('td')[3].get_text()#裝修程度 fwjgreg=secondtable.find_all('tr')[8].find_all('td')[1].get_text()#房屋結構 kfzjreg=secondtable.find_all('tr')[8].find_all('td')[3].string#可否中介 #把資料存入陣列 #只抓取2014年6月以前的,並同時結束程式 if fbdt>="2014-06-01": creatdt.append(fbdt) else: break lg.append(lgreg.replace(' ', '')[0:lgreg.replace(' ', '').find('\n')]) lxr.append(lxrreg) lxdh.append(lxdhreg) sjhm.append(sjhmreg) lxdz.append(lxdzreg) mfxz.append(mfxzreg) xxdz.append(xxdzreg) fwlx.append(fwlxreg) fwhx.append(fwhxreg) fwmj.append(fwmjreg) csjg.append(csjgreg) fkfs.append(fkfsreg) cqxz.append(cqxzreg) synx.append(synxreg) fwxz.append(fwxzreg) zxcd.append(zxcdreg) fwjg.append(fwjgreg) kfzj.append(kfzjreg) #resultinfo=true就結束迴圈 if resultinfo: break #連線mysql並存儲資料 conn=MySQLdb.connect(host="192.168.1.90",port=3306,user="test_dw",passwd="dbDw8#56",db="test_dw",use_unicode=True, charset="utf8") cursor=conn.cursor() sql="insert into houseinfo(lxr,lxdh,sj,lxdz,mfxz,xxdz,fwlx,fwhx,fwmj,csjg,fkfs,cqxz,synx,fwxz,zxcd,fwjg,kfzj,lc,dt) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" temp=zip(lxr,lxdh,lxdh,lxdz,mfxz,xxdz,fwlx,fwhx,fwmj,csjg,fkfs,cqxz,synx,fwxz,zxcd,fwjg,kfzj,lg,creatdt) cursor.executemany(sql,temp) cursor.close() conn.commit() conn.close print("執行成功!")