爬取笔趣网的小说,狂神,并保存在本地
import requests
from bs4 import BeautifulSoup
import time
# lxml 只会局部遍历,而Beautiful Soup 是基于HTML DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多,所以性能要低于lxml。
# 爬取笔趣网下的狂神小说,
# 一章的内容
'''
if __name__ == '__main__':
target = 'http://www.biquw.com/book/7627/5199949.html'
req = requests.get(url=target)
html = req.text # html文档
bf = BeautifulSoup(html) # 解析html文档之前需要创建一个Beautiful Soup对象,括号里参数为需要解析的html信息。然后使用find_all 方法 ,获取HTML信息中的标签。find_all第一个属性为标签名,第二个为标签属性和属性值。写class_是因为python中class为内置属性,为了避免冲突。
texts = bf.find_all('div',class_ = 'contentbox clear')
# print(texts) # 输出带空格和换行和div的文本信息 列表
text = texts[0].text
print(text)
'''
'''
# 获取所有的章节名和章节地址
if __name__ == '__main__':
# 拿到url地址
target = 'http://www.biquw.com/book/7627/'
req = requests.get(url=target)
# 拿到html文档
html = req.text
# 解析html文档信息
div_bf = BeautifulSoup(html) # 创建bf对象来存储html信息
div = div_bf.find_all('div',class_='book_list')
a_list = div_bf.select('div>ul>li>a')
# print(a_list)
# a_bf = BeautifulSoup(str(div[0]))
# a = a_bf.find_all('a')
for each in a_list:
print(each.string,target+each.get('href'))
'''
class download(object):
def __init__(self):
self.target = 'http://www.biquw.com/book/7627/'
self.names = [] # 章节名
self.urls = [] # 每一章的链接
self.nums = 0 # 总共的章节数
'''
download_url 函数说明
作用:获取每一张的url地址
'''
def get_download_url(self):
# 拿到url地址
req = requests.get(url=self.target)
# 拿到html文档
html = req.text
# 解析html文档信息
div_bf = BeautifulSoup(html,'lxml') # 创建bf对象来存储html信息
div = div_bf.find_all('div',class_='book_list')
a_list = div_bf.select('div>ul>li>a')
# 拿到所有的章节名和对应的地址
self.nums = len(a_list)
print(self.nums)
for each in a_list:
# print(each.string,self.target+each.get('href'))
self.names.append(each.string)
self.urls.append(self.target+each.get('href'))
'''
get_content 函数说明:
作用:获取每一章中的文字内容
参数是每一章的地址
'''
def get_content(self,target):
req = requests.get(url=target)
html = req.text # html文档
bf = BeautifulSoup(html,'lxml') # 解析html文档之前需要创建一个Beautiful Soup对象,括号里参数为需要解析的html信息。然后使用find_all 方法 ,获取HTML信息中的标签。find_all第一个属性为标签名,第二个为标签属性和属性值。写class_是因为python中class为内置属性,为了避免冲突。
texts = bf.find_all('div',class_ = 'contentbox clear')
# print(texts) # 输出带空格和换行和div的文本信息 列表
text = texts[0].text
return text
# print(text)
def writer(self,name,path,text):
with open(path,'a',encoding='utf-8') as f:
f.write(name + '\n')
f.write(text)
f.write('\n\n')
if __name__ == '__main__':
dl = download()
dl.get_download_url()
print('狂神开始下载')
for i in range(dl.nums):
time.sleep(1)
text = dl.get_content(dl.urls[i])
dl.writer(dl.names[i],'狂神.txt',text)
print(dl.names[i])
print('第%s章下载完成'%(i+1))
print('狂神下载完成')
参考地址:http://www.360doc.com/content/18/0316/13/25614879_737489595.shtml