簡單網站爬蟲30行代碼


1
#encoding=utf8 2 import urllib.request 3 import re 4 import os 5 6 7 seed="http://idea.lanyus.com/" #最開始的種子,爬取的網站 8 depth=3 #最多遞歸depth層,避免遞歸棧過深 9 count=5 #每一個網頁只抓取count個url做爲新的seed 10 href_re=re.compile(r'href\S=\S"(https?:/\S*)"') #經過正則表達匹配網頁源碼中的URL 11 http_re=re.compile(r'\w+') #經過正則表達匹配中文 12 pages=set()
13 path_dir="." #保存路徑 14 def get_path(url): 15 name='_'.join(href_re.findall(url))[:30] 16 path=os.path.join(path_dir,"%s.txt" %name) 17 def fetch(que=[seed,],dep=0): 18 nxt_que=[] 19 for url in que: 20 print("depth:%d fetch:%s..." %(dep,url)) 21 html=urllib.request.urlopen(url).read() 22 print(html) 23 with open(get_path(url),'w+') as f: 24 f.write(html) #保存網頁內容 25 cnt=0 26 for new_url in href_re.findall(html): 27 if new_url in pages:continue #若是已經爬過則跳過 28 pages.add(new_url) 29 cnt+=1 30 nxt_que.append(new_url) 31 if cnt>=count: 32 break 33 if dep<depth: 34 fetch(nxt_que,dep+1) 35 36 if __name__=="__main__": 37 fetch()
相關文章
相關標籤/搜索