Python Crawler 實作 爬取部落格文章(以痞克邦為例)

最近創建了一個自己的部落格

但是文章都還留在痞客邦

難道要一篇一篇的複製貼上嗎?

其實只要用爬蟲的把自己的文章抓下來發到新的部落格上面就行啦

 

一、爬取方法

這次採用的方式

從該部落格最早的文章開始,往該文章的下一篇進行爬蟲

直到下一篇為最新發佈的文章,即最晚的一篇才停止

二、選取爬蟲起點

舉例來說我部落格的第1篇文章網址為

"http://ivanjo39191.pixnet.net/blog/post/43269858-python%E5%9F%BA%E7%A4%8E%E7%A8%8B%E5%BC%8F%E5%AD%B8%E7%BF%92%E7%B4%80%E9%8C%84%28%E4%B8%80%29"

就從該篇文章內文下方的

" 下一篇:      "

爬取下一篇文章的連結

三、程式撰寫

1.導入套件: 

import requests
from bs4 import BeautifulSoup
import urllib
import re

2.撰寫方法: 

創建一個方法,導入一個網址(link)來進行分析

找出 文章標題、內文、下一篇文章連結: 

def pixnetcrawler(link):
    url = link  #選擇網址
    user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15' #偽裝使用者
    headers = {'User-Agent':user_agent}
    data_res = urllib.request.Request(url=url,headers=headers)
    data = urllib.request.urlopen(data_res, timeout=20)
    sp = BeautifulSoup(data, "html.parser")
    #標題
    title = sp.find("li",{"class":"title"}).find("h2").text
    #內文
    contents = sp.find("div",{"class":"article-content-inner"})
    content = str(contents)    
    #分類
    category = sp.find("div",{"class":"article-footer"}).find("a", href = re.compile('/blog/category')).text
    #下一篇連結
    nextarticle = sp.findAll("a",{"class":"quick-nav--next"}, href = re.compile('http'))
    for n in nextarticle:
        nextlink = n['href']

※ 將文章內文儲存為html原始碼,並且將其型態儲存為str

※ findAll 為找出一串列,而這裡使用正則表達式將下一篇網址連結篩選出來並且賦值給'href'變數

 

2.迴圈爬蟲直到結束: 

    try:
        crawler_do(nextlink)
    except:
        print('結束')
        return redirect('home.html')

 

 

 

到這邊就已經完成文章的資料爬取了

像我轉移網站是使用 Django 架設

就將爬蟲結果自動存入新的資料庫中,就可以快速的轉移所有文章

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 ivankao 的頭像
    ivankao

    IvanKao的部落格

    ivankao 發表在 痞客邦 留言(1) 人氣()