用Python编了一个爬虫,下载小说
最近刚接触了Python爬虫,比较感兴趣,再加上本人喜欢看小说,就试写了一个下载小说的脚本。 脚本说明:提供小说目录页的网址(仅限笔趣阁网站上的小说:http://www.biquge.com/),代码如下:import requests
from bs4 import BeautifulSoup
#提取章节内容
def getNovelChapter(url):
res = requests.get(url)
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text,'html.parser')
try:
title = soup.select('.bookname h1').text
return title + '\n ' + '\n '.join(a for a in soup.select('#content').text.split())
except IndexError:
return ''
url = 'http://www.biquge.tw/0_52/' #小说目录页的网址
headers = {'Host':'www.biquge.tw',
'Connection':'keep-alive',
'Cache-Control':'max-age=0',
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36'}
res = requests.get(url)
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text,'html.parser')
title=soup.select('#info').h1.text #小说名称提取
author=soup.select('#info').p.text.strip() #小说作者提取
file = open(title + '.text','w') #保存文件
file.write(title)
file.write('\n' + author + '\n\n')
i = 0
l = int(len(soup.select('#list dd')))
while (i<l):
ChapterUrl = url + soup.select('#list dd').a['href'].split('/')[-1]
file.write(getNovelChapter(ChapterUrl) + '\n\n')
i=i+1
file.close()
print('下载完成')
问题:1、因只是对某个网站上的网页源码进行解析的,换另一个小说网站可能就不行了,这个暂未去验证;
2、在涵式getNovelChapter(url)中增加了try except代码,可能会导致某个章节漏下载,若不加这个代码,总是会出现超出界限的错误提示(IndexError: list index out of range),且每次运行,下载下来的章节数目不一样(有时候之下在一百多章,有时候二百来章),至今未搞清楚原因;
3、另外脚本运行速度比较慢,暂不知道如何提升。
虽然有许多问题,不过这是本人写的第一个代码,以前没有编程过,当确实下载下来小说时,自我感觉有些小小的激动{:1_912:}。
初次编写Python脚本,不足之处请大神指点,不胜感激!!!
冷亦寒008 发表于 2016-11-21 17:57
我在命令行里直接运行,语法有问题啊。我是3.5的
看你是什么错误,导入的库,你电脑里首先要有 为什么我运行楼主的此源码,出现一下错误我的版本是Python2.7
>>> ================================ RESTART ================================
>>>
Traceback (most recent call last):
File "C:\Python27\Python小说网.py", line 22, in <module>
soup = BeautifulSoup(res.text,'html.pars5er')
File "build\bdist.win32\egg\BeautifulSoup.py", line 1522, in __init__
BeautifulStoneSoup.__init__(self, *args, **kwargs)
File "build\bdist.win32\egg\BeautifulSoup.py", line 1147, in __init__
self._feed(isHTML=isHTML)
File "build\bdist.win32\egg\BeautifulSoup.py", line 1189, in _feed
SGMLParser.feed(self, markup)
File "C:\Python27\lib\sgmllib.py", line 104, in feed
self.goahead(0)
File "C:\Python27\lib\sgmllib.py", line 174, in goahead
k = self.parse_declaration(i)
File "build\bdist.win32\egg\BeautifulSoup.py", line 1463, in parse_declaration
j = SGMLParser.parse_declaration(self, i)
File "C:\Python27\lib\markupbase.py", line 109, in parse_declaration
self.handle_decl(data)
File "build\bdist.win32\egg\BeautifulSoup.py", line 1448, in handle_decl
self._toStringSubclass(data, Declaration)
File "build\bdist.win32\egg\BeautifulSoup.py", line 1381, in _toStringSubclass
self.endData(subclass)
File "build\bdist.win32\egg\BeautifulSoup.py", line 1251, in endData
(not self.parseOnlyThese.text or \
AttributeError: 'str' object has no attribute 'text' 那网站不是可以直接下载吗 那网站不是可以直接下载吗 羊之心羽 发表于 2016-10-23 23:30
那网站不是可以直接下载吗
有吗,没有看到下载的链接,只是为了写爬虫玩,随便找了个小说网站:Dweeqw 那网站不是可以直接下载吗 py大法好 哈哈哈哈,虽然网站的确可以下载,不过第一次自己写程序爬到数据的成就感是前所未有的 你可以改进下,抓取全站数据, 可以试试 scrapy 你可以去爬codevs 云卷~云舒 发表于 2016-10-23 23:38
有吗,没有看到下载的链接,只是为了写爬虫玩,随便找了个小说网站
直接爬起点多好呢