Python實戰項目網絡爬蟲 之 爬取小說吧小說正文


本次實戰項目適合,有一定Python語法知識的小白學員。本人也是根據一些網上的資料,自己摸索編寫的內容。有不明白的童鞋,歡迎提問。

 

目的:爬取百度小說吧中的原創小說《獵奇師》部分小說內容

鏈接:http://tieba.baidu.com/p/4792877734

 

首先,自己定義一個類,方便使用。其實類就像一個“水果籃”,這個“水果籃”里有很多的“水果”,也就是我們類里面定義的變量啊,函數啊等等,各種各樣的。每一種"水果"都有自己的獨特的口味,也即是各個函數實現的功能各不相同。

 

然后,按照這個思路,既然要爬取小說,那么肯定要有目標網頁的地址,也就是上面我給的那個連接。其實就像買水果之前,我們要找到水果店。

 

打開目標貼吧后,會發現里面有很多的貼子,有樓主發的,還有讀者評論的,很多很雜。不過,沒關系。度娘給了我們一個強大的功能,只看樓主。這就是我們的切入點。點擊只看樓主按鈕,哈哈,此時呈現在眼前的就是樓主的主要內容啦。

 

相應的,此時的網頁也有所改變,地址上多了一個只看樓主的標記 http://tieba.baidu.com/p/4792877734?see_lz=1

 

所以,我們在定義類中的初始化函數時,就要有這個標記。

 

接下來,我們開始在選擇不同口味的水果。我們要先獲取網頁的源代碼,就需要有一個getPage的函數。函數里需要有我們的頁碼,注意我們選擇不同也的小說,會發現,我們的地址也是有稍稍變動的,比如:第二頁連接:http://tieba.baidu.com/p/4792877734?see_lz=1&pn=2     多了&pn=2。這個我們要整合一下。

 

(未完>>>>>>>>>明晚繼續)

 

 

下面是我的代碼:

 1 #-*- coding:utf-8 -*-
 2 import urllib
 3 import urllib2
 4 import re
 5 
 6 # 百度小說吧  原創小說《獵奇師》
 7 # 連接http://tieba.baidu.com/p/4792877734?see_lz=1
 8 # 第二頁連接:http://tieba.baidu.com/p/4792877734?see_lz=1&pn=2
 9 class LQS:
10     def __init__(self,daseUrl,seeLZ):
11         self.daseUrl = daseUrl
12         self.seeLZ ='?see_lz=' + str(seeLZ)
13     # 傳入頁碼,獲取網頁源代碼
14     def getPage(self,pageNum):
15         try:
16             # 拼接,地址 + 樓主參數 + 頁數
17             url = self.daseUrl + self.seeLZ + '&pn=' + str(pageNum)
18             request = urllib2.Request(url)
19             response = urllib2.urlopen(request)
20             return response.read()
21         except Exception,e:# 處理異常
22             print e
23     # 獲取標題
24     def getTitle(self,pageNum):
25         html = self.getPage(pageNum)
26         reg = re.compile(r'<title>【原創】恐怖故事 (.*?)_小說吧_百度貼吧</title>')
27         items = re.findall(reg,html)
28         # 將標題寫入文件
29         for item in items:
30             f = open('lqshi.txt','w') # 文件名最好是英文,中文識別不了
31             f.write('標題' + '\t\t' + item)
32             f.close()
33         return items
34     # 獲取正文
35     def getContent(self,pageNum):
36         html = self.getPage(pageNum)
37         reg = re.compile(r'class="d_post_content j_d_post_content ">          (.*?)</div><br>')
38         req = re.findall(reg,html)
39         # 將標題寫入文件
40         for i in req:
41             removeAddr = re.compile('<a.*?</a>')
42             i = re.sub(removeAddr,"",i)# 找到並替換
43             i = i.replace("<br>","\n  ")
44             f = open('lqshi.txt','a')# 此處是寫入正文內容,所以用a
45             f.write( '\n\n\n' + i)
46             f.close()
47         return i
48 
49 daseURL = 'http://tieba.baidu.com/p/4792877734'
50 lqShi = LQS(daseURL,1)
51 print "爬蟲已啟動..."
52 for i in range(4):
53     lqShi.getTitle(i)
54     lqShi.getContent(i)
55     print "正在抓取第%s頁的內容" % (i+1)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM