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,所以我将需要导入模块的代码放在了第一个块,将第一个函数放在了第二块,将第二个函数放在了第三块,最后的主函数放在了第四块,这样编码之后我发现不仅思路更加清晰了,其美观程度也是上升了一大截,不再是一团糟的感觉了,我用起来也是舒服很多。

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

  • 相关阅读:
    nmake不是内部或外部命令,也不是可运行的程序
    MinGW下载和安装教程
    Qt接单
    C++ web 框架
    原型链
    ssh: Could not resolve hostname的一种解决方案
    oracle客户端安装配置
    linux安装go
    golang 为什么结构体方法要写成指针传递
    traceback模块
  • 原文地址:https://www.cnblogs.com/baihuatian/p/11596886.html
Copyright © 2011-2022 走看看