zoukankan      html  css  js  c++  java
  • 如何爬取CSDN博客中分栏的所有文章的标题+链接

    如何爬取CSDN博客中分栏的所有文章的标题和链接
    今天在写一个自己博客的一个博客文章导航的文章,想把各个分栏的文章做一个汇总导航,前面几个分栏还好,文章不多,等到整理算法题目的文章的时候,瞬间就发现问题不对劲了,虽说写的时间不长,但是也有100篇左右的算法题了,这要是手写得写多久啊。这时候就想到能不能爬取一下自己分栏的文章标题和链接呢?
    为了严谨起见,博主还是先去看了下CSDN的robots.txt文件也就是爬虫协议,毕竟博主也不想牢底坐穿啊~~
    CSDN的爬虫协议如下:

    也就是说我们只爬取自己博客的文章标题和文章地址是没问题的。那么就说干就干了,直接上代码吧,很简单的一串代码,在代码里对一些功能进行了注释。

    import re
    import requests
    from bs4 import BeautifulSoup
    
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36',
        # 网站Host
        'Host': 'blog.csdn.net'
    }
    
    # 网页链接
    link = 'https://blog.csdn.net/qq_43422111/category_8847039.html'
    
    # 获取网页
    r = requests.get(link, headers=headers, timeout=10)
    
    # 使用soup进行过滤
    soup = BeautifulSoup(r.text, "lxml")
    
    div_list = soup.find_all('li')
    
    articles = []
    for each in div_list:
        article = {}
        href = str(each.find('a').get('href')).strip()
        title = each.find('h2',class_ = "title")
        title = str(title)
        # 这里的title还需要进一步的处理,因为CSDN在这个h2标题下面还有两个注释:<!--####试读--><!--####试读-->这里用正则把注释去掉
        re_comment = re.compile('<!--[^>]*-->')
        title = re_comment.sub("",title)
        # 去掉注释之后我们在用正则来提取<h2></h2>之间的内容
        # 这里由于</h2>的标签在下一行,中间有个
    ,所里这里的结束标签设置为了
    ,大家可以根据实际情况进行修改
        # 这样最终的标题和链接就提取出来了
        title_re = re.findall(r'<h2 class="title">(.*?)
    ',title)
        # 发现这时标题后面还跟着一堆空格,我们把空格去除一下
        # 先把列表转换为字符串,然后使用字符串的strip()函数即可去除头尾的空格
        mid = "".join(title_re)
        title_f = mid.strip()
        article['href'] = href
        article['title'] = title_f
        articles.append(article)
    
    # 下面我们就来将处理好的这个articles列表按照Markdown本文超链接的格式保存到我们的文本中
    
    # 保存文件的地址
    mylog = open('/Users/qiguan/article.txt',mode='a',encoding='utf-8')
    
    for article in articles:
        # 这里我们在控制台也输出一遍
        print("[", article['title'], "]", "(", article['href'], ")",sep='', end='
    ')
        # 保存到文本中
        print("[",article['title'],"]","(",article['href'],")",sep='',end='
    ',file = mylog)

     这里是将数据打印到了控制台并且保存到了我们的文件中,这里只写了分专栏的进行爬取,但是用来写博客导航的完全够用啦

    ————————————————
    版权声明:本文为CSDN博主「亓官劼」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_43422111/article/details/105176018

    你有什么心态,就有什么样的人生。管不好自己的心态,注定你就是个弱者。
  • 相关阅读:
    Pentaho Data Integration (二) Spoon
    Pentaho Data Integration笔记 (一):安装
    透视纹理引发的对于插值的思考
    读取位图(bitmap)实现及其要点
    关于渲染流水线的几何变化
    关于C++中不同类之间的赋值问题——存疑
    uva 12284 直接判断
    uva 12549 最大流
    uva 12544 无向图最小环
    uva 12587 二分枚举
  • 原文地址:https://www.cnblogs.com/LQZ888/p/12599355.html
Copyright © 2011-2022 走看看