Python版本: Python3.x 一、庫文件 re 二、實戰(zhàn) (1)背景介紹 從樂文小說網(wǎng)站上爬取小說相見歡,并存放至txt文件中 URL: 相見歡 (2)Beautifu Soup庫的簡介 簡單來說,Beautiful Soup是python的一個庫,最主要的功能是從網(wǎng)頁抓取數(shù)據(jù)。官方解釋如下:
詳細請戳這里:Beautiful Soup 4.2.0文檔 (3)實戰(zhàn)進行中…… 【重要】:python想要使用漢字,需要在腳本最前面添加 首先,我們引入我們需要的庫文件 #coding:utf-8 import re import sys from bs4 import BeautifulSoup import urllib.request import urllib.request import time (本次教程的網(wǎng)站沒有反爬蟲機制,可以選擇跳過)
我們從爬取單章開始,首先我們進入第一張的網(wǎng)址相見歡-第一章 url = " file = urllib.request.urlopen(url) data = BeautifulSoup(file , from_encoding="utf8") from_encoding="utf8" 我們需要將內容進行轉碼,否則中文將會以亂碼形式出現(xiàn) 我們首先獲取這章的名稱
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()) |
|