zoukankan      html  css  js  c++  java
  • python3.6 单文件爬虫 断点续存 普通版 文件续存方式

    # 导入必备的包
    # 本文爬取的是顶点小说中的完美世界为列。文中的aa.text,bb.text为自己创建的text文件
    import requests
    from bs4 import BeautifulSoup
    
    # 爬取目标url
    
    url = 'https://www.x23us.com/html/42/42377/'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3393.4 Safari/537.36'
    }
    
    
    # 单独的函数,用于打开bb文件,bb文件用于存章节的url
    def open_href():
        with open('bb.text', 'r', encoding='utf-8') as f:
            a = f.readlines()
        f.close()
        # 将文件里的所有url读出并以列表的形式返回
        return a
    
    
    # 请求目标网址,并返回文本源码
    def page_index():
        html = requests.get(url, headers=headers)
        if html:
            return html.text
    
    
    # 将目标网址进行解析,得到所有章节的url
    def page_list(html):
        if html:
            a = []
            html_bs4 = BeautifulSoup(html, 'lxml')
            html_b = html_bs4.select('.L a')
            for i in html_b:
                title = i.get_text()
                href = url + i.get('href')
                data = {
                    'title': title,
                    'href': href
                }
                a.append(data)
            return a
    
    
    # 将aa文件打开并将得到的章节内容写进文件里并关闭存档
    def text_cun_html(title, html):
        if html:
            with open('aa.text', 'a+', encoding='utf-8') as f:
                f.write(title + '
    ' + html + '
    ')
            f.close()
            print('存档成功!!!!')
            return 'yes'
        else:
            None
    
    
    # 将bb文件打开并将写入aa文件相对应的url写进bb文件里并关闭存档
    def text_cun_href(href):
        if href:
            with open('bb.text', 'a+', encoding='utf-8') as f:
                f.write(href + '
    ')
            f.close()
            print('href存档成功!!')
            return 'ok'
        else:
            None
    
    
    # 将得到的章节url解析并二次请求获取章节内容
    def html_list_index(title, href):
        if href:
            html = requests.get(url=href, headers=headers)
            if html.status_code == 200:
                bs = BeautifulSoup(html.text, 'lxml')
                bs4 = bs.select('#contents')
                for item in bs4:
                    a = text_cun_html(title, item.get_text())
                    # 章节内容存档成功返回yes
                    if a == 'yes':
                        text_cun_href(href)
                    else:
                        None
    
    
    def main():
        # 首先获取下bb文件的url列表
        number = open_href()
        print(number)
        html = page_index()
        data = page_list(html)
        for i in data:
            title = i.get('title')
            href = i.get('href')
            print(href)
            # 判断发生异常后,在启动服务时,我们过滤掉已爬取过的url
            if href + '
    ' not in number:
                html_list_index(title, href)
            else:
                None
    
    
    if __name__ == '__main__':
        main()
    
    
    #简单思路实现断点续存,不喜勿喷,欢迎共同讨论
  • 相关阅读:
    2018年7月28日杂记:迎来大三
    Spring第一课:基于XML装配bean(四),三种实例化方式:默认构造、静态工厂、实例工厂
    在Spring中使用静态工厂时发生的无法得到对象的问题
    队列的实现——java
    队列的实现——c++
    栈的实现——java
    栈的实现——c++
    双向链表的实现——java
    双向链表的实现——c++
    C++类模板 template <class T>
  • 原文地址:https://www.cnblogs.com/zft710/p/8967401.html
Copyright © 2011-2022 走看看