初次嘗試python爬蟲,爬取小說網站的小說。


本次是小阿鵬,第一次通過python爬蟲去爬一個小說網站的小說。

下面直接上菜。

  1.首先我需要導入相應的包,這里我采用了第三方模塊的架包,requestsrequests是python實現的簡單易用的HTTP庫,使用起來比urllib簡潔很多,因為是第三方庫,所以使用前需要cmd安裝。

  cmd安裝方式,打開cmd,輸入以下命令:

                    pip install requests

  2.添加相應的包后,我們需要一個小說鏈接去爬下這本小說也就是一個url。下面是我當時爬的小說url:http://www.shujy.com/5200/244309/

  3.我們現在有了小說的鏈接,這時候就要模擬瀏覽器發送http的請求: 

response=requests.get(url)
response.encoding='gbk'

 

   4.我們可以嘗試獲取目標小說的網頁源碼 

html=response.text

  我們把它打印出來看下:

  

  有html基礎的朋友應該對這些很熟悉。通過打印我們可以看見小說的名字,作者,以及小說章節的url。這時候我們就先通過HTML網頁源碼獲取小說的名字:

title=re.findall(r'<meta property="og:novel:book_name" content="(.*?)"/>',html)[0]

  從上面的代碼我們可以看見是通過正則表達式去匹配的,對正則表達式有疑問的同學可以自行百度下。當然不同網站的具體小說名字可能會放在不同的標簽里,需要我們打開網頁源碼去看看下。

  5.這時候我們也就新建一個文本文件來保存小說內容。

fb=open('%s.txt'% title,'w',encoding='utf-8')

  這時候我們需要獲取小說的章節目錄對應的url,我們還是來觀察下網頁的源碼。我們通過火狐瀏覽器的f12看下網頁可發現:

  小說的章節目標都在標簽<div id='list'>里我們通過下面的代碼獲取對應的章節名和url。用一個list來存放章節信息。

dl=re.findall(r'<div id="list">.*?</div>',html,re.S)[0] chapter_info_list=re.findall(r'<a href="(.*?)">(.*?)</a>',dl)

   6.這個時候我們循環每一章節,分別下載,先把章節的鏈接,章節名提取出來。

for chapter_info in chapter_info_list: chapter_url,chapter_title=chapter_info chapter_url="http://www.shujy.com/5200/244309/%s " % chapter_url chapter_url=chapter_url.replace(' ','')

  我們可以看見對章節的鏈接進行的拼接,因為我們可以看見直接提取出來的鏈接是這樣的:

  所以也就需要一個拼接的操作,取得完整的章節鏈接。

  這個時候來下載小說內容:

chapter_response=requests.get(chapter_url,headers=headers) chapter_response.encoding='gbk' chapter_html=chapter_response.text

我們先是獲取到小說具體章節的頁面。打開具體小說章節f12查看網頁的源碼:

  可以清楚的看見小說的具體內容是在標簽<div id=content>里,和獲取小說章節一樣我們采用正則表達式來取得小說的內容。

chapter_content=re.findall(r'<div id="content">(.*?)</div>',chapter_html,re.S)[0]

我們把獲取到的小說的內容打印出來看看,

  我們看見一些奇怪的字符&nbsp,<br/>等,我們在實際的小說里沒有這些東西,這里就需要我們處理數據。進行一些操作,也叫做數據的清洗。

    chapter_content=chapter_content.replace('&nbsp;','') chapter_content=chapter_content.replace('<br />','') chapter_content=chapter_content.replace('&amp;t;','')

  清洗后的小說內容:

  7.現在就是最后一步把小說保存到本地。

fb.write(chapter_title) fb.write('\n') fb.write(chapter_content) fb.write('\n') print(chapter_url,chapter_title)

  我們來看下最后的結果,我們每爬完一章打印相應的章節鏈接信息和返回的response信息來看是否成功爬取:

  當當當當,成功的爬下了這邊小說。

  

  最后總結下,本次的爬蟲就很簡單是小阿鵬的初次嘗試,中間如果有不對的地方也希望大家的指正,謝謝!

 


免責聲明!

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



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