zoukankan      html  css  js  c++  java
  • 爬虫抓取博客园前10页标题带有Python关键字(不区分大小写)的文章

    写一个简易的爬虫程序,抓取博客园网站首页前10页中所有文章标题带有Python关键字(不区分大小写)的文章,并把文章链接和文章标题存入硬盘,要求如下:

    1. 使用正则表达式匹配出需要的数据,然后对数据进行解析
    2. 程序中很明显有多个任务,这多个任务必须是异步调用
    3. 任务的返回值要及时处理,不能等所有任务都执行完再统一处理
    4. 提示信息:可以使用生产者消费者模型来处理
    5. 尽可能提升程序的执行效率

    爬虫储备知识:
    requests模块是一个非常强大的爬虫模块,它的基本使用非常简单,但是它是所有爬虫程序的根源,我们只需要使用requests模块里面级简单的功能就能完成,用法可以通过查询得知。

    """
    写一个简易的爬虫程序,抓取博客园网站首页前10页中所有文章标题带有
    Python关键字(不区分大小写)的文章,并把文章链接和文章标题存入
    硬盘,要求如下:
    1 使用正则表达式匹配出需要的数据,然后对数据进行解析
    2 程序中很明显有多个任务,这多个任务必须是异步调用
    3 任务的返回值要及时处理,不能等所有任务都执行完再统一处理
    4 提示信息:可以使用生产者消费者模型来处理
    5 尽可能提升程序的执行效率
    """
    
    # 基本思路与实现方案
    import re
    import time
    import requests
    
    t1 = time.time()
    
    title_list = []
    url = 'https://www.cnblogs.com/'
    for i in range(1, 11):
        html = requests.post(url=url, data={"PageIndex": i}).text
        res = re.findall('<h3>.*?ython.*?</h3>', html)
        for j in res:
            title_list.append(j)
    
    print(time.time() - t1)
    
    # 异步思路与优化处理
    import re
    import requests
    from concurrent.futures import ThreadPoolExecutor
    import time
    
    
    def catch(page):
        title_list = []
        url = 'https://www.cnblogs.com/'
        html = requests.post(url=url, data={"PageIndex": page}).text
        res = re.findall('<h3>.*?ython.*?</h3>', html)
        for j in res:
            title_list.append(j)
    
        return title_list
    
    
    def analyze(obj):
        data = obj.result()
        if data:
            for j in data:
                res = j.split("=")
                link = res[2][1:-8]
                title = res[3][9:-9]
                with open('data.txt', mode='a', encoding='utf-8') as f:
                    f.write('%s|%s
    ' % (title, link))
    
    
    if __name__ == '__main__':
        t1 = time.time()
        tp = ThreadPoolExecutor(10)
        for i in range(1, 11):
            tp.submit(catch, i).add_done_callback(analyze)
        print(time.time() - t1)
    
  • 相关阅读:
    java实现第七届蓝桥杯阶乘位数
    java实现第七届蓝桥杯圆圈舞
    java实现第七届蓝桥杯圆圈舞
    java实现第七届蓝桥杯圆圈舞
    java实现第七届蓝桥杯圆圈舞
    java实现第七届蓝桥杯圆圈舞
    java实现第七届蓝桥杯打靶
    java实现第七届蓝桥杯打靶
    Mysql 查询一天中,每个小时数据的数量
    mysql 获取昨天日期、今天日期、明天日期以及前一个小时和后一个小时的时间
  • 原文地址:https://www.cnblogs.com/mayite/p/13373005.html
Copyright © 2011-2022 走看看