[success]今天看了点教程,试了一下爬取某个小说网站的小说,终于测试成功,可以下载小说了,我这里的下载速度大概是每秒1章的样子,不过还是挺快的。这里我没有使用scrapy框架,而是直接使用的BeautifulSoup,这里我就只说一些关键的部分,直接上代码:[/success]
其他的我都在代码里面解释了,这里不在重复
# coding=utf-8
from bs4 import BeautifulSoup
import requests
#我这里直接定义了一个类,这样就可以方便的调用
class book(object):
def __init__(self):
self.target="http://www.qiushuge.net/zhongjidouluo/"#目录网址
self.names=[]#存放章节名字
self.urls=[]#存放url
self.nums=0#章节数
#获取url和章节数
def getmessage(self):
req=requests.get(url=self.target)#发出request请求,得到数据
#把内容都编码,防止乱码问题出现
req.encoding=('utf-8')
content=req.text#获取内容
bf_content=BeautifulSoup(content, "lxml")#对内容进行处理,以便后续过滤
bf_list=bf_content.find_all('span')#查找所有的span标签下的内容如果有class可以加上:class_ = 'showtxt'
bf_content2=BeautifulSoup(str(bf_list),"lxml")#再次进行过滤,因为我们需要span下的a标签(注意要先转换成str类型)
bf_list2=bf_content2.find_all('a')#查找所有的a标签,找到所需要的数据
for value in bf_list2:#遍历数据,把它放到列表中
self.names.append(value.text)#添加数据 .text就是a标签的数据
self.urls.append(value.get('href'))#.get可以查找标签里面的参数
self.nums=len(self.names)#获取总的章节数
#获取章节内容
def gettext(self,target):
req=requests.get(url=target)
req.encoding = ('utf-8')
content=req.text
bf_content=BeautifulSoup(content,"lxml")
bf_list=bf_content.find_all('p')
val=''
for value in bf_list:
val+=(' '+value.text+'
')#这里是循环遍历内容,然后不断把内容拼接起来
return val#返回拼接的内容
def write(self,name,path,text):
with open(path,'a',encoding='utf-8') as f:#这里是把内容写到文本中
f.write(name+'
')
f.write(text+'
')
if __name__ == "__main__":
d1=book()#先初始化类
d1.getmessage()#执行类的函数
print('正在下载《终极斗罗》...')
for value in range(d1.nums):
print('正在下载:%s',d1.names[value])
d1.write(d1.names[value],'斗罗大陆.txt',d1.gettext(d1.urls[value]))#不断把每章的内容都写到文文中
实际效果