python爬蟲之小說爬取


廢話不多說,直接進入正題。

今天我要爬取的網站是起點中文網,內容是一部小說。

首先是引入庫

from urllib.request import urlopen
from bs4 import BeautifulSoup

然后將網址賦值

html=urlopen("http://read.qidian.com/chapter/dVQvL2RfE4I1/hJBflakKUDMex0RJOkJclQ2.html")  //小說的第一章的網址
bsObj=BeautifulSoup(html)                                                                 //創建beautifulsoup對象

首先嘗試爬取該頁的小說內容

firstChapter=bsObj.find("div",{"class","read-content"})                                 //find方法是beautifulsoup對象擁有的函數,
print (firstChapter.read_text())

find方法也可以和正則表達式搭配使用,並且多用於圖片,視頻等資源的爬取

 

由於本次爬取內容全在一個class屬性值為read-content的盒子中,所以采用了find方法,如果該網頁中,文字被放在多個盒子里,則應采用findAll方法,並且返回值為一個集合,需要用循環遍歷輸出。

將代碼整合運行,發現可以實現文章的爬取,但是現在的問題是,爬取了該小說的一章,那么,往后的幾章該如何爬取呢?

由前面步驟可以得出,只要得知下一章的網址,即可進行爬取。首先,將打印文字的部分封裝為函數,那么,每次取得新的地址,即可打印出對應文本

def writeNovel(html):
    bsObj=BeautifulSoup(html)
    chapter=bsObj.find("div",{"class","read-content"})
    print (chapter.get_text())

現在的問題是如何爬取下一章的網址,觀察網頁結構可得知,下一章的按鈕實質是一個id為j_chapterNext的a標簽,那么,可由這個標簽獲得下一章的網址

重新包裝函數,整理得:

from urllib.request import urlopen
from bs4 import BeautifulSoup
def writeNovel(html):
bsObj=BeautifulSoup(html)
chapter=bsObj.find("div",{"class","read-content"})
print (chapter.get_text())
bsoup=bsObj.find("",{"id":"j_chapterNext"})
html2="http:"+bsoup.get('href')+".html"
return (urlopen(html2))

html=urlopen("http://read.qidian.com/chapter/dVQvL2RfE4I1/hJBflakKUDMex0RJOkJclQ2.html")

i=1
while(i<10):
   html=writeNovel(html)
   i=i+1

 將文本寫入text文件中

from urllib.request import urlopen
from bs4 import BeautifulSoup
def writeNovel(html):
    bsObj=BeautifulSoup(html)
    chapter=bsObj.find("div",{"class","read-content"})
    print (chapter.get_text())
    fo=open("novel.text","a")
    fo.write(chapter.get_text())
    fo.close
    bsoup=bsObj.find("",{"id":"j_chapterNext"})
    html2="http:"+bsoup.get('href')+".html"
    return (urlopen(html2))

html=urlopen("http://read.qidian.com/chapter/dVQvL2RfE4I1/hJBflakKUDMex0RJOkJclQ2.html")  

i=1
while(i<8):
    html=writeNovel(html)
    i=i+1

 


免責聲明!

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



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