爬取网络小说最细致的详解

from bs4 import BeautifulSoup#导入BeautifulSoup这个模块爬虫中很关键在第二篇中讲
import requests
#我们大概分三个步骤
#1.获取章节和章节对应的链接信息
#2.获取对应章节的内容
#3.把章节名字已经对应章节的内容写进text文件里面
class spiderstory(object):

    def __init__(self):
        self.url = 'http://www.365haoshu.com/Book/Chapter/'
        self.names = []#存放章节名称
        self.hrefs = []#存放章节链接
    def get_urlandname(self):
        response = requests.get(url=self.url + 'List.aspx?NovelId=6686 ')#回去章节目录类型为<class 'requests.models.Response'>
        req_parser = BeautifulSoup(response.text,"html.parser")
        # req后面跟text和html都行,固定写法,BeautifulSoup默认支持Python的标准HTML解析库数据类型:<class 'bs4.BeautifulSoup'>
        # print(req_parser)
        # print(type(req_parser))
        div = req_parser.find_all('div',class_='user-catalog-ul-li')
        # 查找内容,标签为div,属性为class='user-catalog-ul-li',这里 是找到名字和链接所在的标签,数据类型:<class 'bs4.element.ResultSet'>
        # print(div)
        # print(type(div))
        a_bf = BeautifulSoup(str(div))#进行进一步的字符解析因为获取要素类型的值时必须进行这一步
        # print(type(a_bf))#<class 'bs4.BeautifulSoup'>
        # print(len(a_bf))#1
        a = a_bf.find_all('a') # # 查找内容,标签为a#下面需要获取a标签下的href,所以这里首先要精确到a标签下。才能从a标签下获取属性的值
        # print(len(a))
        # print(a)
        for i in a:#注意class类型和列表等一样也是一个一个元素的,所以他可以用for遍历,你可以用len查看一下
            #print(i.find('span',class_='fl').string)#查找所有span和属性class='fi'的字符类型的内容,注意因为class和类一样了所写成class_
            # print(i)
            # print(i['href'])
            # print(type(i))
            # print(len(i))
            # print(i.find('span',class_='fl'))
            self.names.append(i.find('span',class_='fl').string)#str只获取指定的文本类型
            #print(i.get('href'))#获取有两种方法:1.i.get('href' 2.i['href']
            self.hrefs.append(self.url + i['href'])#注意如果TypeError: must be str, not NoneType,所以这里追加到字符串里面必须以字符的形式加
        print(self.names)
        print(self.hrefs)
    def get_text(self,url):
        # print(self.hrefs[0])
        respons2 =requests.get(url=url)
        # print(respons2)
        c = BeautifulSoup(str(respons2.text),'html.parser')
        # print(c)
        b = c.find_all('p', class_='p-content')
        text = []
        for temp in  b:#获取标签里面的文本只能进行遍历每个满足条件的文本才能获取
            text.append(temp.string)

        #b.string#获取解析后的文本,获取所有的文本类型

        print(text)
        return text
    def writer(self,name,path,text1):
        ''' 写入TXT文档'''
        with open(path,'a',encoding='utf-8') as f:
            f.write(name + '\n')#写入名字并换行
            f.writelines(text1)#追加内容
            f.write('\n\n')#换两行
if __name__ == "__main__": # 运行入口
    a= spiderstory()
    a.get_urlandname()
    # a.get_text()
    for i in range(len(a.names)):
        name = a.names[i]
        text = str(a.get_text(a.hrefs[i]))#注意TypeError: write() argument must be str, not None,写入文档必须是字符串
        a.writer(name,'F:\小说.txt',text)
    print(a)

下载代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值