爬蟲程式
英文為crawler[ˋkrɔlɚ]
網絡爬蟲, 好比在網絡上爬行的一隻蜘蛛, 在網路這張大網爬來爬去. 如果遇到它想吃的食物(資源), 它就會抓下來. 當它在抓取一個網頁時, 若發現了另一個網頁的超鏈接, 那它就可以爬到另一張網上來獲取數據. 這樣整個連在一起的大網對這隻蜘蛛而言都是觸手可及,全部爬下不是難事.
網頁, 是作出來給人看的. 現在的網站這麼多, 絕大多數是我們不需要的資訊, 僅有少數部份是我們需要的. 用眼睛查看, 只會累死自已. 因此如果能寫個程式, 將需要的資訊抽離出來再顯示, 就可省下查尋的時間.
爬蟲與反爬蟲一直持續的在對抗. 今日寫出來的爬蟲程式, 有可能在某日因為網頁的反爬蟲而失效. 為什麼要反爬蟲? 因為這些資訊是要成本的, 不可能讓你一次全部都獲取. 致少也需讓你點選一下, 彈出個廣告視窗賺個廣告費吧. 所以這是一場永無止境的戰爭.
urllib
將某個網頁的html全部抓下來的方法, 如下代碼
import urllib.request response=urllib.request.urlopen("http://mahaljsp.asuscomm.com") print(response.read())
上述套件已過時了, 就不需再深入研究了
requests套件
requests的功能同樣是把網站上的html全都讀進來. 但其功能比urllib強. 下面代碼可以將 “天降巨富”這部小說裏所有章節的title全都爬下來.
首先將html載入後放入page變數. page.text即為整個html的內容. 若再搭配re正規表式示, 就可以容易的匹配出合符我們需求的字串.
re.compile()產生的物件為一個pattern(模板). 最前面”<dd><a href”表示由”<dd><a href”開頭的字串, “.” 表示任何一個字元, 再加上”*”表示多個任意的字元.
import requests, re page = requests.get("http://www.uuxs.tw/ls/22_22102/") page.encoding="utf-8" pattern=re.compile(""<dd><a href.*") list=pattern.findall(page.text) for r in list: print(r) 結果 : <dd><a href="8233492.html" title="第一章 飞龙岂是池中物">第一章 飞龙岂是池中物</a></dd> <dd><a href="8233493.html" title="第二章 什么是富可敌国">第二章 什么是富可敌国</a></dd> <dd><a href="8233494.html" title="第三章 课堂上的前女友">第三章 课堂上的前女友</a></dd> <dd><a href="8233495.html" title="第四章 给你们讲个故事">第四章 给你们讲个故事</a></dd> <dd><a href="8233496.html" title="第五章 直播间里的狂少">第五章 直播间里的狂少</a></dd> <dd><a href="8233497.html" title="第六章 直播间里的土豪">第六章 直播间里的土豪</a></dd>
Your dedication resonates strongly in every word you write. It’s truly remarkable.