爬蟲抓取部落格園前10頁標題帶有Python關鍵字(不區分大小寫)的文章
阿新 • • 發佈:2020-07-24
寫一個簡易的爬蟲程式,抓取部落格園網站首頁前10頁中所有文章標題帶有Python關鍵字(不區分大小寫)的文章,並把文章連結和文章標題存入硬碟,要求如下:
- 使用正則表示式匹配出需要的資料,然後對資料進行解析
- 程式中很明顯有多個任務,這多個任務必須是非同步呼叫
- 任務的返回值要及時處理,不能等所有任務都執行完再統一處理
- 提示資訊:可以使用生產者消費者模型來處理
- 儘可能提升程式的執行效率
爬蟲儲備知識:
requests模組是一個非常強大的爬蟲模組,它的基本使用非常簡單,但是它是所有爬蟲程式的根源,我們只需要使用requests模組裡面級簡單的功能就能完成,用法可以通過查詢得知。
""" 寫一個簡易的爬蟲程式,抓取部落格園網站首頁前10頁中所有文章標題帶有 Python關鍵字(不區分大小寫)的文章,並把文章連結和文章標題存入 硬碟,要求如下: 1 使用正則表示式匹配出需要的資料,然後對資料進行解析 2 程式中很明顯有多個任務,這多個任務必須是非同步呼叫 3 任務的返回值要及時處理,不能等所有任務都執行完再統一處理 4 提示資訊:可以使用生產者消費者模型來處理 5 儘可能提升程式的執行效率 """ # 基本思路與實現方案 import re import time import requests t1 = time.time() title_list = [] url = 'https://www.cnblogs.com/' for i in range(1, 11): html = requests.post(url=url, data={"PageIndex": i}).text res = re.findall('<h3>.*?ython.*?</h3>', html) for j in res: title_list.append(j) print(time.time() - t1) # 非同步思路與優化處理 import re import requests from concurrent.futures import ThreadPoolExecutor import time def catch(page): title_list = [] url = 'https://www.cnblogs.com/' html = requests.post(url=url, data={"PageIndex": page}).text res = re.findall('<h3>.*?ython.*?</h3>', html) for j in res: title_list.append(j) return title_list def analyze(obj): data = obj.result() if data: for j in data: res = j.split("=") link = res[2][1:-8] title = res[3][9:-9] with open('data.txt', mode='a', encoding='utf-8') as f: f.write('%s|%s\n' % (title, link)) if __name__ == '__main__': t1 = time.time() tp = ThreadPoolExecutor(10) for i in range(1, 11): tp.submit(catch, i).add_done_callback(analyze) print(time.time() - t1)