最近在公司真的覺得有點無聊
該說是適應不良還是不適合呢... 也不是三言兩語可以斷定的
大概就是氣氛比較養老吧,沒有什麼比較現代的開發流程,也沒有什麼新的feature可以做
然後那些舊的code又寫得很... 難以想像這是台灣知名軟體公司的code
不過說歸說,我也沒什麼辦法
既然沒辦法在工作上學習到東西,只能利用休息時間自學了
(再次驗證想進步還是要靠自己=ˇ=)
所以想說就來學個python爬蟲吧,爬一爬搞不好以後會有點用
我是用python3.6搭配jupyter來學的,因為之前有裝過就不用新的環境了
這個網路爬蟲嘛,其實基本的概念就是把網路上想要的資訊過濾出來
一般瀏覽器後面的行為其實就跟這些網路爬蟲差不多,只是瀏覽器會用各自的處理方式把資訊秀給你看
而從某部分來說,不是什麼資訊我都想要這樣,中間的處理過程也許也會耗費時間
網路爬蟲就可以減少這些消耗,拿到我們想要的資訊
先簡單介紹一個基本的library:urllib
這是python官方的library,其實有urllib和urllib2兩種(還有urllib3,但這個是第三方的,要另外安裝)
但在python 3.X的版本裡,urllib和urllib2已經合併成urllib了,所以基本不用太在意XD
基本上urllib就是處理url的各種網路相關的事務
比如說讀取和開啟url,處理error還有parse等等,算是爬蟲的基本使用library
當然第三方的library也很好用,比如說requests,用起來更加簡潔好用,也是一個選擇
就先用一個簡單的範例開始吧:
from urllib.request import urlopen
html = urlopen("http://www.ptt.cc/bbs/LoL/index.html")
print(html.read())
這一段code就是連向那個url的並且將回傳結果,當然印出來會是一堆xml格式的response,因為基本上沒有做任何處理
然後實際上上面的code會有403 forbbien error
這是因為有些網站為了避免爬蟲來獲取資訊,會對來存取的request有一些限制
比如說在header裡面沒有包含user agent資訊(包含瀏覽器、系統平台或是用戶等資訊),網站就不會允許存取
所以上面的code可以改成這樣:
from urllib.request import urlopen
from urllib.request import Request
req = Request("http://www.ptt.cc/bbs/LoL/index.html", headers={'User-Agent': 'Mozilla/5.0'})
html = urlopen(req)
print(html.read())
在request中加入需要的資訊,這邊是加上瀏覽器的資訊,就可以進行存取了
但如果是用requests的話,就不用這樣做了:
import requests
html = requests.get("http://www.ptt.cc/bbs/LoL/index.html")
這樣就可以得到一樣的結果
再來提一個解析的library,BeautifulSoup
這個library就是用來解析用的,可以快速方便的抓出我們想要的資訊
比如說上面的例子,我們想要抓出ptt lol版裡的title:
from urllib.request import urlopen
from urllib.request import Request
from bs4 import BeautifulSoup
req = Request("http://www.ptt.cc/bbs/LoL/index.html", headers={'User-Agent': 'Mozilla/5.0'})
html = urlopen(req)
bsObj = BeautifulSoup(html)
titles = bsObj.select("div.title a")
for title in titles:
print(title.text)
這樣就會印出所有討論串的title
bsObj裡面就包含了解析出來的資訊,可以用select、find等等的function去得到你想要的資訊
這篇就是簡單的介紹記錄一下
下一篇會有比較多的應用,期待一下吧XD
留言列表