使用Python原生爬蟲爬取部落格文章的簡單資訊

2021-10-23 06:04:20 字數 3757 閱讀 7537

今天我們使用python的原生方式,來爬取我們自己的部落格的一些簡單資訊。

在製作乙個簡單的python爬蟲之前,我們需要先分析一下我們需要使用爬蟲來爬取什麼資訊,又該通過什麼方式來解析出我們所需要的資訊。

為了便於封裝爬取的資訊,我們在article.py模組下建立乙個資訊類,裡面封裝了我們需要爬取的資訊。

class

article

(object):

url =

'' title =

'' date =

'' read_num =

0 comment_num =

0def

__init__

(self, url, title, date, read_num, comment_num)

: self.url = url

self.title = title

self.date = date

self.read_num = read_num

self.comment_num = comment_num

我們在spider.py模組下建立乙個爬蟲類。

import re

from urllib import request

from article import article

class

spider()

:# 部落格路徑

url =

''# 單個部落格文章內容塊的正規表示式

article_pattern =

'[\s\s]*?

[\s\s]*?

'# 單個部落格文章url和標題的正規表示式

title_pattern =

'[\s\s]*?原創([\s\s]*?)'

# 單個部落格文章上傳時間的正規表示式

date_pattern =

'([\d\d]*?)'

# 單個部落格文章閱讀次數的正規表示式

read_num_pattern =

'閱讀數 ([\d]*?)

' comment_num_pattern =

'# 通過url獲取html頁面內容,並通過utf-8進行解碼

def__fetch_content

(self, url)

: r = request.urlopen(url)

html = r.read(

)return

str(html, encoding=

'utf-8'

)# 通過html頁面獲取頁面中的文章內容塊

def__get_article

(self, html)

: article_html = re.findall(self.article_pattern, html)

return article_html

# 對每個文章內容塊進行處理,獲取部落格的url和標題

def__get_url_and_title

(self, article)

: r = re.search(self.title_pattern, article)

url = r.group(1)

.strip(

) title = r.group(2)

.strip(

)return url, title

# 對每個文章內容塊進行處理,獲取部落格的上傳時間

def__get_date

(self, article)

: r = re.search(self.date_pattern, article)

date = r.group(1)

.strip(

)return date

def__get_read_num

(self, article)

: r = re.search(self.read_num_pattern, article)

read_num =

int(r.group(1)

)return read_num

def__get_comment_num

(self, article)

: r = re.search(self.comment_num_pattern, article)

comment_num =

int(r.group(1)

)return comment_num

# 對部落格文章列表進行遍歷,然後分別處理每乙個部落格文章內容,進行封裝處理

def__do_package

(self, article_html, article_list)

:for article in article_html:

url, title = self.__get_url_and_title(article)

date = self.__get_date(article)

read_num = self.__get_read_num(article)

comment_num = self.__get_comment_num(article)

article = article(url, title, date, read_num, comment_num)

# 爬蟲的入口函式

defgo

(self)

: page =

1 article_list =

while page:

url = self.url +

str(page)

page +=

1 html = self.__fetch_content(url)

article_html = self.__get_article(html)

iflen

(article_html)==0

:break

self.__do_package(article_html,article_list)

return article_list

# 例項化乙個spider物件

spider = spider(

)# 呼叫spider的go()方法,獲取乙個article物件的列表

article_list = spider.go(

)# 一共爬取了多少條資訊

print

('爬蟲一共爬取了'

+str

(len

(article_list))+

'條部落格文章資訊'

)# 遍歷列表,列印列表中的資料

for article in article_list:

print

(article.__dict__)

通過上面的**,我們使用python原生的方式爬取的資訊,就會直接在控制台列印出來。

如果我們需要爬取其他部落格使用者的資訊,只需要修改url的值即可。

最後需要說一句的是,csdn沒有對部落格內容進行反爬蟲,但是對於訪問量等部落格資料卻有著反爬蟲機制,可以防止使用者通過爬蟲來惡意刷訪問量,所以那些想通過爬蟲來刷訪問量的同學可以洗洗睡了。

Python爬蟲之微博評論爬取

import requests 請求 import time 時間 from fake useragent import useragent 隨機請求頭 import re 正則模組 登入微博,f12開啟瀏覽器抓包功能 直接攜帶cookie 引數請求即可 這個方法很簡單,但是只能爬取50頁左右,如果...

爬蟲之爬取微博

3忘記了包含yeild的函式生成器目的是可以作為乙個迭代物件 貼源 importrequests fromurllib.parseimporturlencode frompyqueryimportpyqueryaspq base url header defget page page,value p...

Python 爬蟲爬取網頁

工具 python 2.7 import urllib import urllib2 defgetpage url 爬去網頁的方法 request urllib.request url 訪問網頁 reponse urllib2.urlopen request 返回網頁 return response...