本文以DeepSeek来实现爬虫。来看看DeepSeek实际能力咋样!
我们以爬取博客为例,为大家演示。
#爬取标题和链接#
利用Python爬取我的博客中的所有文章标题和标题链接。(需要翻页,每一页的规律如下:如第二页为https://blog.bbskali.cn/page/2/第三页为 https://blog.bbskali.cn/page/3/ 第四页为 https://blog.bbskali.cn/page/4/ 以此类推。)博客地址:https://blog.bbskali.cn 将结果保存为csv格式并输出。文章标题html代码如下:
<div class="post_title_wrapper"> <h2 class="m-t-xs text-ellipsis index-post-title text-title"><a href="https://blog.bbskali.cn/4234.html">Homeassistant界面美化</a></h2>
</div>
HAPPY TEACHER'S DAY

可以看到,讲解非常详细。
运行生成的代码,效果如下:

接下来,我们玩点有难度的。爬取每篇文章的阅读量、评论量、和发文时间。

新建对话如下:
#爬取文章阅读量、评论量、#
非常好,上面代码成功爬取了博客的所有标题和链接。接下来,我需要你分别到每篇文章的链接中去,爬取文章的阅读量、评论量、和发文时间。相关html代码如下:
HAPPY TEACHER'S DAY


效果

完整代码
import requests
from bs4 import BeautifulSoup
import csv
import re
import time
def get_post_details(url, headers):
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
except Exception as e:
print(f"获取文章详情失败:{url},错误:{str(e)}")
return None, None, None
soup = BeautifulSoup(response.text, 'html.parser')
# 解析发文时间
date_li = soup.find('li', class_='meta-date')
post_date = date_li.find('time').text.strip() if date_li else ''
# 解析阅读量
views_li = soup.find('li', class_='meta-views')
views = 0
if views_li:
views_text = views_li.find('span', class_='meta-value').text
match = re.search(r'(\d+)', views_text.replace(' ', ' '))
views = match.group(1) if match else 0
# 解析评论量
comments_li = soup.find('li', class_='meta-comments')
comments = 0
if comments_li:
comments_tag = comments_li.find('a', class_='meta-value') or comments_li.find('span', class_='meta-value')
if comments_tag:
match = re.search(r'(\d+)', comments_tag.text)
comments = match.group(1) if match else 0
return post_date, views, comments
def get_all_posts():
base_url = "https://blog.bbskali.cn"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
all_data = []
page_num = 1
while True:
# 构造分页URL
url = f"{base_url}/page/{page_num}/" if page_num > 1 else base_url
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
except Exception as e:
print(f"停止在第 {page_num} 页,错误:{str(e)}")
break
soup = BeautifulSoup(response.text, 'html.parser')
posts = soup.find_all('div', class_='post_title_wrapper')
if not posts:
break
for post in posts:
h2_tag = post.find('h2', class_='index-post-title')
if not h2_tag:
continue
a_tag = h2_tag.find('a')
if a_tag and a_tag.has_attr('href'):
title = a_tag.text.strip()
link = a_tag['href']
# 获取文章详细信息
post_date, views, comments = get_post_details(link, headers)
# 收集数据
all_data.append([
title,
link,
post_date,
views,
comments
])
# 礼貌性延迟
time.sleep(0.5)
print(f"已处理第 {page_num} 页,累计文章数:{len(all_data)}")
page_num += 1
# 保存数据
with open('blog_posts_full.csv', 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
writer.writerow(['标题', '链接', '发布日期', '阅读量', '评论数'])
writer.writerows(all_data)
return len(all_data)
if __name__ == "__main__":
count = get_all_posts()
print(f"完整数据已保存到 blog_posts_full.csv,总计 {count} 篇文章")
# 执行示例输出
"""
已处理第 1 页,累计文章数:10
已处理第 2 页,累计文章数:20
...
完整数据已保存到 blog_posts_full.csv,总计 56 篇文章
"""
总结:
利用DeepSeek可以帮我们生成相关代码。当然,需要我们描述一定要清楚!