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"
就從該篇文章內文下方的
" 下一篇: Python基礎程式學習紀錄(二) "
爬取下一篇文章的連結
三、程式撰寫
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 架設
就將爬蟲結果自動存入新的資料庫中,就可以快速的轉移所有文章
全站熱搜
留言列表