Python爬虫笔记(1)--对新笔趣阁进行爬取

前期准备:
(1) 安装 requests(获取整个网页的HTML信息)
在cmd中,使用如下指令安装requests:

pip install requests

(2)安装 beautifulsoup4(解析HTML信息,提取我们需要的内容)
在cmd中,使用如下指令安装requests:

pip install beautifulsoup4

(3)确定文章链接(http://www.xbiquge.la/13/13959/5939025.html)
在这里插入图片描述
先获取页面

# -*- coding:UTF-8 -*-
import requests

if __name__ == '__main__':
    target = 'http://www.xbiquge.la/13/13959/5939025.html'
    req = requests.get(url=target)
    req.encoding = 'UTF-8'   # 获取到的页面会是乱码,需要转码
    html = req.text
    print(html)

再使用BeautifulSoup获取自己需要的内容

# -*- coding:UTF-8 -*-
import requests
from bs4 import BeautifulSoup

if __name__ == '__main__':
    target = 'http://www.xbiquge.la/13/13959/5939025.html'
    req = requests.get(url=target)
    req.encoding = 'UTF-8'   # 获取到的页面会是乱码,需要转码
    html = req.text
    bf = BeautifulSoup(html, features="html.parser") # 我使用了我系统中可用的最佳HTML解析器("html.parser")
    texts = bf.find_all("div", id="content")  #提取网页中id为content的div模块,返回的结果是一个列表
    print(texts[0].text.replace('\xa0' * 8, '\n\n'))  #使用text属性,提取文本内容,滤除br标签,随后使用replace方法,去掉下图的八个空格符号,并用回车代替

注意:这里是通过id来获取相应模块,如果是通过class来获取模块,则需要加入下划线(class_),因为python中class是关键字
上面运行完之后,可能在pyCharm中运行的结果与cmd中不一致,cmd中完整爬取了数据,而pyCharm中只有后面一段
在这里插入图片描述
这是因为显示不全,实际上数据已经获取到

有了以上基础,我们对章节目录进行获取
在这里插入图片描述

import requests
from bs4 import BeautifulSoup

req = requests.get(url = 'http://www.xbiquge.la/13/13959/')
req.encoding = 'UTF-8'  # 获取到的中文会是乱码,需要转码
html = req.text
div_bf = BeautifulSoup(html, features="html.parser")
div = div_bf.find_all('div', id = 'list')
print(div)

可以看到输出结果为
在这里插入图片描述
爬取到的数据有章节名和对应的超链接,这时候我们需要的就是将章节名称和超链接提取出来,而超链接的格式便是网页的server+提取的数据。

div = div_bf.find_all('div', id = 'list')
a_bf = BeautifulSoup(str(div[0]), features="html.parser")
a = a_bf.find_all('a')   #获取章节链接
self.nums = len(a)       #统计章节数

最后我们将代码整合,并加上文件存储模块,以下为完整代码

# -*- coding:UTF-8 -*-
import requests,sys
from bs4 import BeautifulSoup

class getNovel(object):

    def __init__(self):
        self.server = 'http://www.xbiquge.la/' #接章节链接
        self.target = 'http://www.xbiquge.la/13/13959/'  #小说主页
        self.names = []            #存放章节名
        self.urls = []            #存放章节链接
        self.nums = 0            #章节数

    """
    将爬取的文章内容写入文件
    Parameters:
        name - 章节名称(string)
        path - 当前路径下,小说保存名称(string)
        text - 章节内容(string)
    Returns:
        无
    """
    def writer(self, name, path, text):
        write_flag = True
        with open(path, 'a', encoding='utf-8') as f:
            f.write(name + '\n')
            f.writelines(text)
            f.write('\n\n')

    """
    爬取的文章内容
    Parameters:
        target - 内容路径
    Returns:
        文章内容
    """
    def get_content(self,target):
        req = requests.get(url=target, headers={
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36",
            "Cookie": "_abcde_qweasd=0; Hm_lvt_169609146ffe5972484b0957bd1b46d6=1583122664; bdshare_firstime=1583122664212; Hm_lpvt_169609146ffe5972484b0957bd1b46d6=1583145548",
            "Host": "www.xbiquge.la"})
        req.encoding = 'UTF-8'  # 获取到的中文会是乱码,需要转码
        html = req.text
        bf = BeautifulSoup(html, features="html.parser")  # 我使用了我系统中可用的最佳HTML解析器("html.parser")
        texts = bf.find_all("div", id="content")  # 提取网页中id为content的div模块,返回的结果是一个列表
        if (len(texts) ==0 ):
            content = "未获取到章节内容"
        else:
            content = texts[0].text.replace('\xa0' * 8, '\n\n')  # 使用text属性,提取文本内容,滤除br标签,随后使用replace方法,去掉下图的八个空格符号,并用回车代替
        return content

    """
    函数说明:获取下载链接
    Parameters:
        无
    Returns:
        无
    Modify:
        2017-09-13
    """
    def get_novel_url(self):
        req = requests.get(url = self.target)
        req.encoding = 'UTF-8'  # 获取到的中文会是乱码,需要转码
        html = req.text
        div_bf = BeautifulSoup(html, features="html.parser")
        div = div_bf.find_all('div', id = 'list')
        a_bf = BeautifulSoup(str(div[0]), features="html.parser")
        a = a_bf.find_all('a')   #获取章节链接
        self.nums = len(a)                                #剔除不必要的章节,并统计章节数
        for each in a:
            self.names.append(each.string)
            self.urls.append(self.server + each.get('href'))

if __name__ == '__main__':
    gn = getNovel()

    gn.get_novel_url()

    print('《圣墟》开始下载:')
    for i in range(gn.nums):
        gn.writer(gn.names[i], '圣墟.txt', gn.get_content(gn.urls[i]))
        sys.stdout.write("\r  已下载:{0:.3f}".format(i/gn.nums))  #加“\r”刷新
        sys.stdout.flush()
    print('《圣墟》下载完成')

爬取结果:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值