如何爬取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>的标签在下一行,中间有个\n,所里这里的结束标签设置为了\n,大家可以根据实际情况进行修改
    # 这样最终的标题和链接就提取出来了
    title_re = re.findall(r'<h2 class="title">(.*?)\n',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='\n')
    # 保存到文本中
    print("[",article['title'],"]","(",article['href'],")",sep='',end='\n',file = mylog)



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

发布了151 篇原创文章 · 获赞 230 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43422111/article/details/105176018