python編寫爬蟲獲取區域程式碼-遞迴獲取所有子頁面
阿新 • • 發佈:2019-02-14
上一篇文章用htmlparser寫了一個java的獲取區域的爬蟲,覺得太笨重。發現python也可以實現這個功能。
這裡就簡單寫一個用python3寫的小爬蟲例子
功能目標:對指定網站的所有區域資訊進行篩選,並儲存到文字中
思路:1、定義一個佇列,初始向佇列中put一個地址
2、判斷佇列是否為空,不為空呼叫getURL函式,為空則結束
3、getURL獲取URL連結的內容,並用beautifulSoup(第三方需要單獨安裝,可百度)匹配a連結
4、對匹配的內容進行字串拼接,呼叫text_create儲存成文字
宣告:這個只是一個DEMO,可以參考學習使用,所以邏輯不是很嚴謹,大家勿噴。
#coding:utf-8 import urllib.request import sys,operator import queue import re import sys from bs4 import BeautifulSoup base = "http://www.diqudaima.com/" lr = queue.Queue() def text_create(name, msg):#儲存檔案,傳入檔名與內容 desktop_path = '/Users/wuhao/Desktop/python/' full_path = desktop_path + name + '.txt' file = open(full_path,'w') file.write(msg) file.close() print('Done :',name) def getURL(url): try: req = urllib.request.Request(url) response = urllib.request.urlopen(req) the_page = response.read().decode("GBK") soup = BeautifulSoup(the_page, 'html.parser') data=soup.select("div ul li a")#獲取a連結 body ='' if len(data)>0: for html_tag in data: print("title : "+html_tag.string) print(base+html_tag['href'][1:]) body+=html_tag.string body+='\n' lr.put_nowait(base+html_tag['href'][1:]) else: data=soup.select("div ul li") for html_tag in data: print("title : "+html_tag.string) body+=html_tag.string body+='\n' mode = re.compile(r'\d+') print (mode.findall(url)) if len(mode.findall(url))>0: text_create(mode.findall(url)[0],body) except:#因為可能出現TimeoutError等異常,這裡捕獲並重新放入佇列中 print("連結超時,未處理連結:",lr.qsize()) lr.put_nowait(url) else: print("未處理連結:",lr.qsize()) if __name__ == "__main__": url="http://www.diqudaima.com/zhejiang/hangzhoushi/" lr.put_nowait(url) while not lr.empty(): vistorUrl =lr.get_nowait() print ("訪問連結:"+vistorUrl) getURL(vistorUrl)
執行結果: