zoukankan      html  css  js  c++  java
  • 博客园200页数据的抓取

    1:任务步骤:抓取博客的(标题,简要内容,发布人,发布时间)

    首先直接上手requests获取网站数据,发现可以直接获取。

    因此不需要进行多余的反爬措施,只需要专注于数据的获取逻辑。

    数据是直接放在源代码中的。

    数据获取:观察页面源代码可知

    数据都是存放在  ”<div class="post_item">“标签下,可以选择先获取某个博客的所有内容随后再进行信息的获取

    数据的获取则是使用select函数,css选择器来获取信息

    这里我定义了两个函数

    其一是获取网页页面链接的函数

    def return_url_list(page):
        
        """
        生成博客园博客url列表并返回
        """
        
        url_list = []
        for i in range(1,page+1):
            url_list.append("https://www.cnblogs.com/cate/python/#p" + str(i)) # 将两个页数不同的url比较可以知道其不同点在于最后的一个数字,因此可以通过for循环构建链接

      # 但其实我想到了一种更为节省空间的方法,即使用生成器,每生成一个就抓起一个
    return url_list

    其二是根据链接获取网页信息并输出的函数

    def get_data(url,m):
        
        """
        获取博客园中python栏目下的200页数据
        数据包括:
            1:博客标题
            2:博客简述
            3:发布人
            4:发布日期
            5:阅读数量和评论数量
        """
        
        rsp = requests.get(url,headers={'user-agent':"chrome/10"})
        rsp.encoding = rsp.apparent_encoding
        
        soup = bs(rsp.text)
        k = 0
        for tag in soup.select("div.post_item_body"):
            
            print("博客标题:",tag.h3.text)
            print("博客链接:",tag.h3.a["href"])
            for t in tag.select("div.post_item_foot"):
                t = t.get_text()
                l = t.split("
    ")
                for i in l:# 这里主要是对div标签下的数据简单地获取了
                    i_list = i.split(" ")
                    for i in i_list:
                        if len(i) >= 2:
                            print(i)
                    
    
            k = k + 1
            print("==============第 {} 个博客成功================".format((m-1)*20+k))
            

    结果展示;

    2:存在的缺陷

    标签的获取没有充分的经验,总是使用落后的select来获取标签,一遇到比较少见的标签就不知所措,毫无头绪,这是需要改正的地方。

    3:优点

    表示我这次对代码进行了分门别类的优秀操作,因为我使用的是jupyter,所以我将需要导入模块的代码放在了第一个块,将第一个函数放在了第二块,将第二个函数放在了第三块,最后的主函数放在了第四块,这样编码之后我发现不仅思路更加清晰了,其美观程度也是上升了一大截,不再是一团糟的感觉了,我用起来也是舒服很多。

    希望继续保持,加油加油。

  • 相关阅读:
    Rust交叉编译Mac编译Linux/Windows平台
    SpringBoot 如何生成接口文档
    Echarts + Python 实现的动态实时大屏范例
    计算机中的0.1+0.2=0.3吗?(无可避免的浮点误差)
    Odin线刷失败的常见错误原因分析及解决方法(转载)
    Odin3 刷机工具刷机教程, BL、AP、CP 与 CSC 是什么意思(转载)
    各种常见USB接口类型
    三星S8+手机,刷机经验
    小米8手机,MIUI由12.5降级到9.5、安卓由10降到8;先ROOT,再安装Magisk、Xposed的步骤
    手机刷机相关,若干名词
  • 原文地址:https://www.cnblogs.com/baihuatian/p/11596886.html
Copyright © 2011-2022 走看看