1. 程式人生 > 其它 >python爬取部落格園資訊用於歸檔--excel篇

python爬取部落格園資訊用於歸檔--excel篇

之所以要寫程式碼進行爬取,是因為我太懶了,嗚嗚嗚,如果能天天躺著刷手機誰會打程式碼~~

今天上午歸檔的時候歸了半個多小時我就不想歸檔了,就在圖書館摸魚,摸著摸著就萌生了寫爬蟲的想法;

下面介紹一下這個爬蟲

1.匯入庫  

第一步就是匯入所需要的庫equests, xlwt,BeautifulSoup,urllib.request,這些庫包含了爬蟲的解析庫,還有excel的操作庫,可以pip進行安裝。

import requests, xlwt
from bs4 import BeautifulSoup
import urllib.request

2.建立儲存容器

url_list1 = []  #
用於存放標題和url url_list2 = [] #用於存放日期 url_list3 = [] #用於存放詳情介面

3.進行列表介面的爬取,列表介面可以爬取題目,連結,日期。這次寫爬蟲有一個深刻教訓,爬取內容儘量在一個div裡邊進行爬取,起初題目和時間不在一個div裡邊,導致爬的題目和日期數目對不上位,一個錯誤卡了我兩個小時。

# 獲取列表頁中的所有部落格url,標題,連結,日期;
def get_url(html):
    soup = BeautifulSoup(html, 'lxml')  # lxml是解析方式,第三方庫

    blog_url_list1 = soup.find_all('
div', class_='postTitle') for i in blog_url_list1: url_list1.append([i.find('a').text, i.find('a')['href']]) #獲取列表日期,時間 blog_url_list2 = soup.find_all('div', class_='postDesc') for i in blog_url_list2: s = i.text[9:25] # print(s) url_list2.append(s)
#開始爬取 for page in range(0, 1): #定義要爬取的頁面數 url = 'http://www.cnblogs.com/linmob/default.html?page={}'.format(page) # print(url) get_url(get_content(url))

4.詳情頁進行詳細內容的爬取

#詳情頁中內容進行分步爬取
lens = len(url_list1)

for j in range(0, lens):
    url=url_list1[j][1]
    req=urllib.request.Request(url)
    resp=urllib.request.urlopen(req)
    html_page=resp.read().decode('utf-8')
    soup=BeautifulSoup(html_page,'html.parser')

#print(soup.prettify())

    div=soup.find(id="cnblogs_post_body")

    url_list3.append([div.get_text()])

5.生成表格

newTable = '韓佳作.xls' #生成的excel名稱
wb = xlwt.Workbook(encoding='utf-8')  # 開啟一個物件
ws = wb.add_sheet('blog')  # 新增一個sheet
headData = ['部落格標題', '連結','時間','詳細內容']
# 寫標題
for colnum in range(0, 4): #定義的四列名稱
    ws.write(0, colnum, headData[colnum], xlwt.easyxf('font:bold on'))  # 第0行的第colnum列寫入資料headDtata[colnum],就是表頭,加粗
index = 1
#lens = len(url_list1)
# 寫內容
# print(len(url_list1),len(url_list2))
print(url_list2)
for j in range(0, lens):
    ws.write(index, 0, url_list1[j][0])
    ws.write(index, 1, url_list1[j][1])
    ws.write(index, 2, url_list2[j])
    ws.write(index, 3, url_list3[j][0])
    index += 1  # 下一行
wb.save(newTable)  # 儲存

完整程式碼

import requests, xlwt
from bs4 import BeautifulSoup
import urllib.request

url_list1 = []  # 用於存放標題和url
url_list2 = []  #用於存放日期
url_list3 = []  #用於存放詳情介面

# 獲取原始碼
def get_content(url):
    html = requests.get(url).content
    return html


# 獲取列表頁中的所有部落格url,標題,連結,日期;
def get_url(html):
    soup = BeautifulSoup(html, 'lxml')  # lxml是解析方式,第三方庫

    blog_url_list1 = soup.find_all('div', class_='postTitle')
    for i in blog_url_list1:
        url_list1.append([i.find('a').text, i.find('a')['href']])

    #獲取列表日期,時間
    blog_url_list2 = soup.find_all('div', class_='postDesc')
    for i in blog_url_list2:
        s = i.text[9:25]
        # print(s)
        url_list2.append(s)


#開始爬取
for page in range(0, 1): #定義要爬取的頁面數
    url = 'http://www.cnblogs.com/linmob/default.html?page={}'.format(page)
    # print(url)
    get_url(get_content(url))


#詳情頁中內容進行分步爬取
lens = len(url_list1)

for j in range(0, lens):
    url=url_list1[j][1]
    req=urllib.request.Request(url)
    resp=urllib.request.urlopen(req)
    html_page=resp.read().decode('utf-8')
    soup=BeautifulSoup(html_page,'html.parser')

#print(soup.prettify())

    div=soup.find(id="cnblogs_post_body")

    url_list3.append([div.get_text()])


newTable = '韓佳作.xls' #生成的excel名稱
wb = xlwt.Workbook(encoding='utf-8')  # 開啟一個物件
ws = wb.add_sheet('blog')  # 新增一個sheet
headData = ['部落格標題', '連結','時間','詳細內容']
# 寫標題
for colnum in range(0, 4): #定義的四列名稱
    ws.write(0, colnum, headData[colnum], xlwt.easyxf('font:bold on'))  # 第0行的第colnum列寫入資料headDtata[colnum],就是表頭,加粗
index = 1
#lens = len(url_list1)
# 寫內容
# print(len(url_list1),len(url_list2))
print(url_list2)
for j in range(0, lens):
    ws.write(index, 0, url_list1[j][0])
    ws.write(index, 1, url_list1[j][1])
    ws.write(index, 2, url_list2[j])
    ws.write(index, 3, url_list3[j][0])
    index += 1  # 下一行
wb.save(newTable)  # 儲存

懶還是第一生產力啊,同時希望我在接下來的概率論和毛概考試起飛~~~~