您的位置:首页 > 编程语言 > Python开发

Python爬虫抓取小说内容——20180314

2018-03-14 19:39 387 查看
首先,在这个日子,让我为科学巨星——霍金哀悼!一路走好!
该文章主要为我个人对Jack Gui的小说爬虫代码的理解,侵删。
原作者网址:http://cuijiahua.com/blog/2017/10/spider_tutorial_1.html# WARNING:以下所有注释均为个人理解,仅供参考!不具有权威性!
# -*- coding: UTF-8 -*-
from bs4 import BeautifulSoup
import requests,sys

#定义一个下载的类
class downloader(object):

def __init__(self):
self.server = 'http://www.biqukan.com/'
self.target = 'http://www.biqukan.com/1_1094/'
self.names = [] #存放各章节名称
self.urls = [] #存放各章节地址(url)
self.nums = 0 #存放章节数目

#获得各章节的URL
def get_download_url(self):
req = requests.get(url = self.target) #根据当前url获得网页回应
html = req.text #获取回应中的HTML内容
div_bf = BeautifulSoup(html,'html.parser') #利用BS函数对HTMl内容进行处理,具体请参照BS函数用法:http://beautifulsoup.readthedocs.io/zh_CN/latest/
div = div_bf.find_all('div',class_ = 'listmain') #获得html中class=’listmain'的div部分
a_bf = BeautifulSoup(str(div[0]),'html.parser') #获取div[0]部分的内容并对其进行处理
a = a_bf.find_all('a') #获取div[0]中a的部分
self.nums = len(a[15:]) #去除前15个章节
for each in a[15:]: #将章节名称和URL导入
self.names.append(each.string)
self.urls.append(self.server + each.get('href'))#each.get('href')获取a中包含的相对地址

#通过URL抓取各章节内容
def get_contents(self, target):
req = requests.get(url = target) #获取网页回应
html = req.text #获取此章节html内容
bf = BeautifulSoup(html,'html.parser') #进行处理
texts = bf.find_all('div',class_ = 'showtxt') #获得showtxt部分(通过分析网页的源代码发现小说内容在showtxt中)
texts = texts[0].text.replace('\xa0'*8,'\n\n') #删除段落中的8个空格
return texts

#将小说内容写入文件
def writer(self, name, path, text): #name为章节名,path为文件路径(名)
with open(path, 'a', encoding='utf-8') as f:
f.write(name + '\n') #写入该章节名称
f.writelines(text) #写入该章节内容(writelines为写入list)
f.write('\n\n')

if __name__ == '__main__':
dl = downloader()
dl.get_download_url()
print('《一念永恒》开始下载:')
for i in range(dl.nums):
dl.writer(dl.names[i],'一念永恒.txt',dl.get_contents(dl.urls[i]))
sys.stdout.write(" 已下载:%.3f%%" % float(i/dl.nums*100) + '\r')
sys.stdout.flush()
print('《一念永恒》下载完成')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Python