美文网首页
7. 实战-获取的某个网站的小说资源

7. 实战-获取的某个网站的小说资源

作者: 运维开发_西瓜甜 | 来源:发表于2020-03-24 19:43 被阅读0次

    本文链接:https://www.jianshu.com/p/6dfa229448bf
    作者:西瓜甜

    一、 需求

    现在我们的需求是把下面网站上的小说下载下来,并把处理后的内容,写的本地的一个文件中

    image.png

    网址是: http://www.pingfandeshijie.net/di-yi-bu-01.html

    分析技术点

    模拟浏览器的行为

    我们可以使用第三方模块来完成这件事

    其实这几就是最底层的爬虫原理

    requests 获取数据

    import requests
    url = 'http://www.pingfandeshijie.net/di-yi-bu-01.html'
    
    # 模拟浏览器发送请求并得到回应, 返回的是一个 response 对象
    r = requests.get(url)
    
    # 从返回的对象中得到字符串类型的数据 r.content 是二进制的数据
    html = str(r.content, encoding='utf-8')
    
    # 这里为了测试的目的,可以把爬取的网页内容写的一个文件中
    # 因为频繁的测试,会导频繁的请求,有可能被网站禁掉我们的 IP
    # 写好后就可以把这段代码先注释掉了
    with open('平凡的世界.txt', 'w', encoding='utf-8') as f:
        f.write(html)
    

    python 操作文件

    语法

    with open("文件路径", "文件的打开模式",  encoding="字符编码")  as 变量(文件对象):
        执行文件对象对应的方法,这里的代码必须缩进 4 个空格
        多行缩进要一致
    
    • 文件路径支持绝对路径和相对路径
    • 文件的打开模式有:
      • r 只读 ,文件对象可以被 for 循环,每次循环一行
      • w 只写, f.write(接收的是字符串) f.writeline(接收一个列表) 每次都会把之前的内容先清空,之后才写入新的内容

    处理数据

    我们处理数据可以把刚才写入的文件再读到内存中,进行进一步的处理

    with open('平凡的世界.html', 'r', encoding='utf-8') as f:
        for line in f:
            if line.startswith('<p>') and '=' not in line:
                print(line)
    

    输出:

    <p>1975年二、三月间,一个平平常常的日子,细蒙蒙的雨丝夹着一星半点的雪花,正纷纷淋淋地向大地飘洒着。时令已快到惊蛰,雪当然再不会存留,往往还没等落地,就已经消失得无踪无影了。黄土高原严寒而漫长的冬天看来就要过去,但那真正温暖的春天还远远地没有到来。</p>
    ...............................篇幅原因,后面略了..............................
    

    作业:

    继续爬取 到 第五章,并把数据处理后,写如到一个文件。
    处理过的数据,不能有 html 的标签。

    示例:

    1975年二、三月间,一个平平常常的日子,细蒙蒙的雨丝夹着一星半点的雪花,正纷纷淋淋地向大地飘洒着。时令已快到惊蛰,雪当然再不会存留,往往还没等落地,就已经消失得无踪无影了。黄土高原严寒而漫长的冬天看来就要过去,但那真正温暖的春天还远远地没有到来

    解题代码:

    # 第三方模块,需要自己安装
    # 如何安装?
    # 在 shell 中,执行如下命令
    # pip3 install  requests
    import requests
    
    def query_html(url):
        """
        请求url,并返回 html 页面内容
        :return: str html 页面内容
        """
        r = requests.get(url)
    
        # 把 二进制的内容转换成字符串, 就是页面的内容
        html = str(r.content, encoding='utf-8')
        return html
    
    
    def parse_data(data):
        """
        清洗数据
        :param data:  str html page
        :return: list  处理之后数据列表
        """
        content = []
        url = ''
    
        for line in data.splitlines():
            if '<p>下一章:' in line:
                url = line.split()[1]
                url = url.split('"')[1]
                break
            elif '<p>' in line:
                # 去除 每行两端的 p 标签
                line = line[3:-4]
                content.append(line + '\n')
        return content, url
    
    
    def write_file(conent='', file_name=''):
        """写文件"""
        if not file_name:
            file_name = '平凡的世界-路遥.txt'
    
        # 以 a (追加) 的模式打开文件,进行持续的写入内容
        with open(file_name, 'a', encoding='utf-8') as f:
            f.writelines(conent)
    
    
    
    def main(url_path):
        
        while url_path:
            html = query_html(url_path)
            content_list, url_path = parse_data(html)
            write_file(content_list)
    
            if '06.html' in url_path:
                break
    
     
    
    
    if __name__ == '__main__':
        url_path = 'http://www.pingfandeshijie.net/di-yi-bu-01.html'
        main(url_path)
    
    
    
    

    相关文章

      网友评论

          本文标题:7. 实战-获取的某个网站的小说资源

          本文链接:https://www.haomeiwen.com/subject/qbkpjhtx.html