【Python实战】Python采集文章标题及链接

185 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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 文件中。