附:github源碼
本文以爬取鏈家北京東城區租房信息爲例。
先看一下我的目錄結構:
__pycache__
db.py //簡單封裝操作mysql的工具類
getproxy.py //從西刺網獲取免費網絡代理,並存到ip.json中,取用
image.png
ip.json //存放免費網絡代理
main.py //程序主入口
myhtml.py //解析鏈家網的內容獲取需要的信息
其實這個例子沒什麼難的,簡單介紹一下main文件,如果有不理解的地方可以給我留言。
爬去的地址:https://bj.lianjia.com/zufang/dongcheng/
import datetime
from myhtml import getHtml
from db import Db
#實例化db對象
db = Db()
#獲取當前時間
start_time = datetime.datetime.now()
#爬取方法(爬取的頁碼)
def run(page):
global start_time,datetime
#調用自身時,可以一頁一頁往後爬
page=page+1
#第一頁地址不加參數,從第二頁開始加參數,pg?就是?頁
quer = 'pg'+str(page) if page>1 else ''
url="https://bj.lianjia.com/zufang/dongcheng/"+quer
arr = getHtml(url)
#arr長度爲0,則證明此頁沒數據,所有頁已爬完,方法返回不再調用自身
if len(arr)==0:
db.close()
print('全爬完,總耗時:',(datetime.datetime.now()-start_time).seconds,'秒')
return
#這一段是爲了將爬取的數據存入mysql,我沒有好好封裝db類,所以這裏就稍微寫的麻煩一些
keys=[]
for i in arr[0]:
keys.append(i)
value=[]
for i in arr:
tstr = ''
for idx in keys:
if isinstance(i[idx],str):
tstr +='"'+ i[idx]+'",'
else:
tstr+='"'+','.join(i[idx])+'",'
value.append(tstr[:-1])
# break
db.insert('beijing',keys,value)
#dos窗口打印信息
print(page,'頁, ',len(arr),'條數據','over,計時',(datetime.datetime.now()-start_time).seconds,'秒')
#循環調用自身
run(page)
run(0)