本文以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>
运行生成的代码,效果如下:
接下来,我们玩点有难度的。爬取每篇文章的阅读量、评论量、和发文时间。
新建对话如下:
非常好,上面代码成功爬取了博客的所有标题和链接。接下来,我需要你分别到每篇文章的链接中去,爬取文章的阅读量、评论量、和发文时间。相关html代码如下:
完整代码
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可以帮我们生成相关代码。当然,需要我们描述一定要清楚!
原文始发于微信公众号(kali笔记):不会写代码 用DeepSeek实现爬虫
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论