本文實例講述了Python實現爬取逐浪小說的方法。分享給大家供大家參考。具體分析如下:
本人喜歡在網上看小說,一直使用的是小說下載閱讀器,可以自動從網上下載想看的小說到本地,比較方便。最近在學習Python的爬蟲,受此啟發,突然就想到寫一個爬取小說內容的腳本玩玩。于是,通過在逐浪上面分析源代碼,找出結構特點之后,寫了一個可以爬取逐浪上小說內容的腳本。
具體實現功能如下:輸入小說目錄頁的url之后,腳本會自動分析目錄頁,提取小說的章節名和章節鏈接地址。然后再從章節鏈接地址逐個提取章節內容。現階段只是將小說從第一章開始,每次提取一章內容,回車之后提取下一章內容。其他網站的結果可能有不同,需要做一定修改。在逐浪測試過正常。
現分享此代碼,一是做個記錄,方便自己以后回顧。二么也想拋磚引玉,希望各路大神不吝賜教。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#-*-coding:utf8-*- #!/usr/bin/python # Python: 2.7.8 # Platform: Windows # Program: Get Novels From Internet # Author: wucl # Description: Get Novels # Version: 1.0 # History: 2015.5.27 完成目錄和url提取 # 2015.5.28 完成目錄中正則提取第*章,提取出章節鏈接并下載。在逐浪測試下載無誤。 from bs4 import BeautifulSoup import urllib2,re def get_menu(url): """Get chapter name and its url""" user_agent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0" headers = { 'User-Agent' :user_agent} req = urllib2.Request(url,headers = headers) page = urllib2.urlopen(req).read() soup = BeautifulSoup(page) novel = soup.find_all( 'title' )[ 0 ].text.split( '_' )[ 0 ] # 提取小說名 menu = [] all_text = soup.find_all( 'a' ,target = "_blank" ) # 提取記載有小說章節名和鏈接地址的模塊 regex = re. compile (ur '\u7b2c.+\u7ae0' ) # 中文正則匹配第..章,去除不必要的鏈接 for title in all_text: if re.findall(regex,title.text): name = title.text x = [name,title[ 'href' ]] menu.append(x) # 把記載有小說章節名和鏈接地址的列表插入列表中 return menu,novel def get_chapter(name,url): """Get every chapter in menu""" html = urllib2.urlopen(url).read() soup = BeautifulSoup(html) content = soup.find_all( 'p' ) # 提取小說正文 return content[ 0 ].text if __name__ = = "__main__" : url = raw_input ( """Input the main page's url of the novel in ZhuLang\n Then Press Enter to Continue\n""" ) if url: menu,title = get_menu(url) print title, str ( len (menu)) + '\n Press Enter To Continue \n' # 輸出獲取到的小說名和章節數 for i in menu: chapter = get_chapter(i[ 0 ],i[ 1 ]) raw_input () print '\n' + i[ 0 ] + '\n' print chapter print '\n' |
希望本文所述對大家的Python程序設計有所幫助。