小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

利用python爬取小說(轉載)_番茄小說爬蟲

 求知881 2023-07-07 發(fā)布于河南
Python版本: Python3.x

一、庫文件                                       

re 
sys
BeautifulSoup
urllib.request
time

二、實戰(zhàn)                                           

(1)背景介紹

從樂文小說網(wǎng)站上爬取小說相見歡,并存放至txt文件中

URL: 相見歡

(2)Beautifu  Soup庫的簡介

  簡單來說,Beautiful Soup是python的一個庫,最主要的功能是從網(wǎng)頁抓取數(shù)據(jù)。官方解釋如下:

  • Beautiful Soup提供一些簡單的、python式的函數(shù)用來處理導航、搜索、修改分析樹等功能。它是一個工具箱,通過解析文檔為用戶提供需要抓取的數(shù)據(jù),因為簡單,所以不需要多少代碼就可以寫出一個完整的應用程序。

  • Beautiful Soup自動將輸入文檔轉換為Unicode編碼,輸出文檔轉換為utf-8編碼。你不需要考慮編碼方式,除非文檔沒有指定一個編碼方式,這時,Beautiful Soup就不能自動識別編碼方式了。然后,你僅僅需要說明一下原始編碼方式就可以了。

  • Beautiful Soup已成為和lxml、html6lib一樣出色的python解釋器,為用戶靈活地提供不同的解析策略或強勁的速度。

詳細請戳這里:Beautiful Soup 4.2.0文檔

(3)實戰(zhàn)進行中……

【重要】:python想要使用漢字,需要在腳本最前面添加 #coding:utf-8,漢字使用的編碼為utf-8,否則會出現(xiàn)錯誤)

首先,我們引入我們需要的庫文件

#coding:utf-8
import re    
import sys    
from bs4  import BeautifulSoup    
import urllib.request    
import urllib.request
import time

(本次教程的網(wǎng)站沒有反爬蟲機制,可以選擇跳過)

  1. headers = ('User-Agent', 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1')

  2. opener = urllib.request.build_opener()
    opener.addheaders = {headers}
  3. urllib.request.install_opener(opener)

我們從爬取單章開始,首先我們進入第一張的網(wǎng)址相見歡-第一章

url = " 
file = urllib.request.urlopen(url)
data = BeautifulSoup(file , from_encoding="utf8")
from_encoding="utf8"

我們需要將內容進行轉碼,否則中文將會以亂碼形式出現(xiàn)

我們首先獲取這章的名稱

  1. section_name = data.title.string
    print(section_name)

    運行結果:

   

section_name = data.title.string

我們利用這句話獲取文章的章名(我認為比較簡便的一種方法)

接下來我們需要獲取這章的內容?。。ú蝗豢词裁葱≌f呢?)

我們按F12進入開發(fā)者功能,找出存放內容的標簽

按照父子順序細細劃分

于是,我們尋找到了存放內容的標簽

用下述語句將內容存放至section_text中

section_text = data.select('#bgdiv .border_l_r #content p')[0].text

按照指定格式替換章節(jié)內容,運用正則表達式

section_text=re.sub( '\s+', '\r\n\t', section_text).strip('\r\n')

運行結果

至此,我們單章爬取任務完成

接下來我們任務當然是獲取整本小說的內容了!

首先我們來比較一下每一章的網(wǎng)址

第一章:http://www./books/21/21335/6381842.html

第二章:http://www./books/21/21335/6381843.html

……

因此URL的構成:http://www./books/21/21335/章節(jié)序號.html

我們觀察網(wǎng)頁源代碼可以發(fā)現(xiàn):

其中next_page = "6381843.html"便是下一章的章節(jié)序號

因此我們在每個網(wǎng)頁訪問結束時,便可以進行訪問下一章的網(wǎng)址

這里我們使用正則匹配獲取下一章的章節(jié)序號

pt_nexturl = 'var next_page = "(.*?)"'

nexturl_num = re.compile(pt_nexturl).findall(str(data))

nexturl_num = nexturl_num[0]

當我們訪問到相見歡最后一章時

當訪問到最后一章時,我們的小說已經(jīng)全部爬取結束

此時正則匹配到的信息為:"http://www./books/21/21335/"

于是我們可以通過這個判斷我們是否爬取結束

 
 if(nexturl == 
     
     'http://www./books/21/21335/'):break

當我們爬取到了內容當然要進行文件讀寫進行存放

fp = open('相見歡.txt','a')

section_text = section_text

fp.write(section_name+"\n")

fp.write(section_text+"\n")

至此,本次爬取結束~您就可以將txt文件存放到手機上,看小說嘍~

三、完整代碼                                                                         

 
 #coding:utf-8#author:Ericam_import reimport sysfrom bs4 
     
     import BeautifulSoupimport urllib.requestimport timeheaders = (
     
     'User-Agent', 
     
     'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1')opener = urllib.request.build_opener()opener.addheaders = {headers}urllib.request.install_opener(opener)def get_download(url):file = urllib.request.urlopen(url)data = BeautifulSoup(file , from_encoding=
     
     "utf8")section_name = data.title.stringsection_text = data.select(
     
     '#bgdiv .border_l_r #content p')[
     
     0].textsection_text=re.sub( 
     
     '\s+', 
     
     '\r\n\t', section_text).strip(
     
     '\r\n')fp = open(
     
     '2.txt',
     
     'a')fp.write(section_name+
     
     "\n")fp.write(section_text+
     
     "\n")fp.close()pt_nexturl = 
     
     'var next_page = "(.*?)"'nexturl_num = re.compile(pt_nexturl).findall(str(data))nexturl_num = nexturl_num[
     
     0]return nexturl_numif __name__ == 
     
     '__main__':url = 
     
     "http://www./books/21/21335/6381842.html"num = 
     
     228index = 
     
     1get_download(url)while(
     
     True):nexturl = get_download(url)index += 
     
     1sys.stdout.write(
     
     "已下載:%.3f%%" % float(index/num*
     
     100) + 
     
     '\n')sys.stdout.flush()url = 
     
     "http://www./books/21/21335/"+nexturlif(nexturl == 
     
     'http://www./books/21/21335/'):breakprint(time.clock())

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約