何謂爬蟲

      在〈何謂爬蟲〉中有 1 則留言

爬蟲程式

英文為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>

1 thought on “何謂爬蟲

  1. Leroy Alvey

    Your dedication resonates strongly in every word you write. It’s truly remarkable.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *