Python以終為始]Day 10–網路爬蟲

想研究機器學習的前端工程師,從零到一百學習python的筆記

Jingle Lin
Jiingler

--

爬蟲

  1. 連線到網站網址(一般、傳統網站)或api位址(ajax/xhr網站)
  2. 解析資料
  3. 關鍵:盡可能讓程式模仿一個普通使用者的樣子

解析資料模組使用

  • json格式資料:使用json模組
  • html格式資料:使用第三方套件BeautifulSoup(安裝pip3 install beautifulsoup4)

範例-取得ptt電影版的文章標題:

抓取網頁資料

連線至ptt電影版(直接連線網頁位址):

連線至ptt電影版

此時出現urllib.error.HTTPError: HTTP Error 403: Forbidden的錯誤:
連線被拒絕(這個連線看起來不是一個正常的使用者)

必須建立一個request物件加上request header去讓連線看起來像是一個使用者:

建立request物件,加上header資訊

然後就可以取得網頁資料(html):

此時可以取得網頁資料

解析html

取得網頁標題:

取得網頁標題

取得文章標題:

文章標題html結構:

<div class="title">       
<a href="/bbs/movie/M.1665279460.A.94C.html">[心得]臥虎藏龍4K 修復. </a>
</div>

利用bs4套件幫助我們取得文章標題:

完成!

範例-取得ptt八卦版的文章標題:

與電影版差異:

進入八卦版前有一個判斷年齡的畫面,使用cookie存放已經點選過的紀錄。

request header部分新增一個已經完成判斷的cookie資料:

利用header寫入“cookie”: “over18=1”,讓爬蟲可以直接進入ptt八卦版抓取資料

範例-取得使用ajax/xhr 技術網站的文章標題:

抓取網頁資料

連線至台北市資料大平台取得標題內容的api連結

  • 在request物件中,除了headers還需附上request data(又稱payload或request data)
  • 利用json.dumps()將字典轉成字串,再加以編碼後送出
除了headers還需附上request data(又稱payload或request data)

利用json.loads()將字串轉為字典,再研究一下資料構造,即可取得標題:

--

--