從“頂點小說”下載完整小說——python爬蟲


  此程序只是單純的為了練習而做,首先這個頂點小說非收費型的那種小說網站(咳咳,我們應該支持正版,正版萬歲,✌)。經常在這個網站看小說,所以就光榮的選擇了這個網站。此外,其實里面是自帶下載功能的,而且支持各種格式:(TXT,CHM,UMD,JAR,APK,HTML),所以可能也並沒有設置什么反爬措施,我也只設置了請求頭。然后內容是保存為txt格式。

  內容涉及到request的使用(編碼問題),xpath的使用,字符串的處理(repalce產生列表達到換行效果),文件I/O

  頂點小說:https://www.booktxt.net

代碼功能:輸入小說名,若頂點小說中存在,則可直接下載。最終效果如下:

 

 

 

 

 

 1 # -*- coding:utf-8 -*-
 2 import requests
 3 from lxml import etree
 4 
 5 novel_name = ''  #全局變量,存放小說名稱
 6 headers = {
 7         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
 8 
 9 def get_url(name):
10     '''
11         通過百度獲取小說在頂點小說中的網址
12         name:小說名
13     '''
14     #site: booktxt.net + 小說名 指定為該網站搜索
15     baidu = 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=site%3A%20booktxt.net%20'+name
16 
17     #獲取該小說在頂點小說中的網址
18     r = requests.get(baidu, headers=headers)
19     html = etree.HTML(r.content)
20     try:
21         #提取網址鏈接,若不存在則退出程序
22         url = html.xpath('//*[@id="1"]/h3/a/@href')[0]
23         url =requests.get(url, headers=headers).url
24     except:
25         print("該小說不存在!")
26         exit(0)
27     if url[-4:] == 'html': #搜索結果為某一章節,結果無效
28         print("該小說不存在!")
29         exit(0)
30     get_chapter(url) #獲取小說章節
31 
32 def get_chapter(url):
33     '''
34     獲取搜索到的小說名,並詢問是否下載
35 
36     :param url: 小說的鏈接
37     '''
38     global novel_name
39 
40     r = requests.get(url=url,headers=headers)
41     coding = r.apparent_encoding #獲取網頁編碼格式
42 
43     html = etree.HTML(r.content, parser=etree.HTMLParser(encoding=coding))
44 
45     novel_name = html.xpath('//*[@id="info"]/h1/text()')[0]
46     print('小說名:'+novel_name+'\n是否下載?是/否\n')
47     flag = input()
48     if flag=='':
49         print('退出系統')
50         exit(0)
51 
52     list = html.xpath('//*[@id="list"]/dl/dd[position()>8]') #獲取章節列表
53     for item in list:
54         chapter_name = item.xpath('./a')[0].text #每一章的名稱
55         print(chapter_name)
56         link = item.xpath('./a/@href')[0] #每章的網址鏈接
57         full_link = url+link #每章的完整地址
58         print(full_link)
59         get_text(chapter_name,full_link)
60 
61 def get_text(name,link):
62     '''
63     獲取每章的內容並寫入至txt文件中
64     :param name: 小說章節名
65     :param link: 章節鏈接
66     :return:
67     '''
68 
69     r = requests.get(url=link, headers=headers)
70     coding = r.apparent_encoding
71     r = r.content
72 
73     html = etree.HTML(r, parser=etree.HTMLParser(encoding=coding))
74     #獲取一章內容,並以空格為界分割成字符串列表
75     text = html.xpath('string(//*[@id="content"])').split()
76     #print(text)
77     #創建小說名.txt文件
78     with open('{}.txt'.format(novel_name),'a+',encoding='utf-8') as f:
79         f.write('\t'*3+name+'\n') #章節名
80         for i in range(len(text)):
81             f.write(' '*4+text[i]+'\n')
82 
83 if __name__ == '__main__':
86     novel_name = input('請輸入小說名稱:')
88     get_url(novel_name)

 


免責聲明!

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



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