如何爬取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