Python番外篇:爬取CSDN博文中所有的代码

hello,大家好,我是wangzirui32,今天我们来学习如何爬取CSDN博文中所有的代码。

1. 分析网页源码

如图:
分析

2.编写代码

代码如下:(不懂看注释)

# 导入所需模块
from requests import get
from bs4 import BeautifulSoup as bs
import re # 正则表达式模块

# 伪造请求头
headers = {
    
    
           "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36",
		   "Host": "blog.csdn.net"
}

# 输入文章链接
article_link = input("请输入文章链接:")

try:
	# 请求网址
    r = get(article_link, headers=headers)
except Exception:
    print("错误!请重新再试!")
else:
    soup = bs(r.text, "html.parser")
	
	# 获取所有code标签
    codes = soup.find_all("code")
    # 设置代码id
    code_id = 1

	# 遍历codes
    for code in codes:
    	# re.sub方法主要用来替换某个内容
    	# 这里需要替换的内容为<> 中间的(.*?)指任意内容
    	# 第二个参数是替换成的内容 ""相当于删除
    	# 第三个参数是要替换的字符串
        code_content = re.sub(r"<(.*?)>", "", code.text)

		# 打开文件 写入代码 声明编码为UTF-8
        with open("code_" + str(code_id) + ".txt", "w", encoding="UTF-8") as f:
            f.write(code_content)

        code_id += 1

但是,这段代码只能爬取除html源码以外的内容,这是因为"<(.*?)>"会把所有html标签(包括展示的代码)全部删掉,这里我给出一个解决办法,就是把

code_content = re.sub(r"<(.*?)>", "", code.text)

换成

code_content = re.sub(r"<span class='token(.*?)'>", "", code.text)

因为所有的样式设置都是在span标签中,class属性多以token开头,所以这样编写。如果你还有更好的解决办法,可以在评论区留言哦!


3.运行代码

运行代码,按照提示输入:

请输入文章链接:https://blog.csdn.net/wangzirui32/article/details/113871177

运行结束后,打开代码文件所在目录,应该可以看到2个文本文件,分别为code_1和code_2,打开就可以看到代码了。


这就是今天的全部内容,你学会了吗?喜欢这篇文章的可以点赞收藏,拜拜!

猜你喜欢

转载自blog.csdn.net/wangzirui32/article/details/115052489