持续创作,加速成长!这是我参与「掘金日新计划 · 4 月更文挑战」的第29天,点击查看活动详情
前言
大家好,我们今天来爬取c站的某个博主的文章的标题和链接。今天实现的原理特别简单,我们只要用到正则表达式就可以。下面看看我是怎么实现的吧。
功能实现
我们这里先确定博主的主页的链接,我们通过分析发现,他们都有一定的规律,接下来,我们就可以访问这个链接。代码如下:
ID = input('输入ID')
for page in range(1, 25):
print(f'=================正在爬取第{page}页数据内容=================')
urls = f'https://blog.csdn.net/{ID}/article/list/{page}'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}
response = requests.get(url=urls, headers=headers)
我们这里首先使用 input()
函数获取用户输入的 ID 值,然后使用一个 for 循环遍历博客平台上的每一篇文章。在循环中,使用 range()
函数生成一个从 1 到 24 的整数序列,表示要爬取的文章页码范围。然后,使用字符串格式化操作符 f-string
将每个页码和文章 ID 值拼接成一个 URL,并将该 URL 发送到服务器端。服务器端接收到请求后,使用 requests
库发送一个 GET 请求到指定的 URL,并将响应数据存储在 response
变量中。
获取标题和链接
list_url=re.findall('<div class="article-item-box csdn-tracking-statistics" data-articleid="(.*?)">',response.text)
for i in list_url:
urls = 'https://blog.csdn.net/m0_48405781/article/details/' + i
print(urls)
title = re.findall('<h1 class="title-article" id="articleContentId">(.*?)</h1>',requests.get(urls,headers=headers).text)[0]
print(title)
我们这里首先使用 re.findall()
函数从响应中提取所有的 <div class="article-item-box csdn-tracking-statistics" data-articleid="(.*?)">
标签,然后将这些标签中的 data-articleid
属性值提取出来,并将其拼接成一个 URL 链接。接着,程序使用 requests.get()
函数发送一个 GET 请求到指定的 URL,并将响应数据存储在 response
变量中。
在循环中,程序使用 re.findall()
函数从响应中提取所有的 <h1 class="title-article" id="articleContentId">(.*?)</h1>
标签,来获取我们的标题,通过上面的程序,我们就可以把我们的标题和文章链接获取了下来。
保存内容
我们这里把我们的数据保存下来,下面就是数据的写入了。其实,把字典数值写入到csv文件里面,特别简单,只需要四行代码就可以实现。
f = open('对比.csv', mode='a', encoding='utf-8_sig', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['标题',
'链接'])
csv_writer.writeheader()
程序创建了一个名为 csv_writer
的 csv.DictWriter
对象,并将其与文件对象 f
关联。 fieldnames
参数设置为 ['标题', '链接']
,表示要将列标题和列链接作为数据写入文件。
最后,程序使用 writeheader()
方法将列标题和列链接写入文件。 writeheader()
方法需要先调用 csv_writer.writeheader()
方法写入头行,然后才能继续写入数据。
我们这段代码中的 open()
函数中的 mode
参数设置为 'a'
,表示以追加模式打开文件。如果要以写入模式打开文件,可以将 mode
参数设置为 'w'
。
dit = {
'标题':title,
'链接':urls
}
csv_writer.writerow(dit)
我们这里创建了一个名为 dit
的字典对象,其中包含两个键值对,分别是 '标题'
和 '链接'
。然后,程序使用 csv_writer.writerow()
方法将这个字典对象写入 CSV 文件中。