MATLAB画图 发表于 2025-2-8 12:04:00

太强了!平时需要三四天的工作量使用豆包AI直接干到10分钟搞定

老wu最近在查阅一份技术资料,该资料内容仅提供在线的网页浏览方式,并且需要通过账号登录之后才有权限进行内容浏览。每次浏览都需要登录嫌麻烦不说,老wu还担心后续账号权限被撤销就再也无法查阅内容了,所以,将在线内容保存到本地才是王道。好在该资料对内容的复制不做任何限制,将网页内容复制并粘贴到老wu目前在用的Typora这款markdown编辑工具中,可以很好保持原文的图文排版,并且图片也可以一并缓存到本地。

但问题是,该资料的网页页面太多了,有好几千个页面,手动复制粘贴感觉太枯燥,效率也不高,需要好几天才能完成,这时老wu自然就想到用爬虫来抓取内容。当然,老wu之前只知道有爬虫可以抓取内容,老wu的博客网站就经常被各种爬虫把CPU负载拉满,所以之前一直关注的是如何防范爬虫,至于如何使用爬虫来抓取内容倒是没怎么研究过。

按以往的模式,在没有经验的情况下,用python开发一款爬虫程序,老wu通常会去谷歌上搜索现成的代码,这些代码要么是github上的项目,要么是各种论坛或者博客的分享。当然,别人分享的代码即使可以顺利运行,其功能也不一定适合自己的需求,所以搜索代码,修改代码然后测试,然后再继续搜索和验证,一番折腾下来估计得花三四天的时间吧。

不过现在不一样了,现在有了豆包的AI编程,老wu只需要把程序的逻辑需求给到豆包AI,豆包AI在短短几秒内就能给出完整的可执行的代码,简直就是革命性的生产力提升!

以下是老wu调戏,不对,是调试豆包AI的过程,也作为老wu的备忘录记录下。



首先,老wu投喂给豆包AI提示词:

“请帮我用 Python 生成一个网页内容爬取程序,网页的链接为https://abc.com/browse_item.php?id=1逐步递增到https://abc.com/browse_item.php?id=8216,提取内容为markdown格式,特别提示:该网站需要登录之后才有权限浏览内容,登录的链接为:https://abc.com/Login.php,能否在爬取之前先通过浏览器进行登录,然后使用浏览器登录后的会话进行内容的爬取,提取所有网页的内容归档到同一个markdown文件中,文件名为doc.md,需要提取的是网页中的#workingarea选择器内的内容,其中的#workingarea > div.item_question中的内容添加H3标题格式,跳过#workingarea > div.item_params的内容无需提取,提取#workingarea > div.item_answer内的内容为正文部分。”

然后豆包给出了解决方案:

要实现这个需求,我们可以使用selenium库来模拟浏览器登录,并获取登录后的会话,然后使用BeautifulSoup库来解析网页内容。以下是具体的实现步骤和代码:

安装依赖库

首先,确保你已经安装了所需的库:

[*]pip install selenium beautifulsoup4另外,你还需要下载对应浏览器的驱动,例如 Chrome 浏览器需要下载 ChromeDriver,下载地址:ChromeDriver 下载,下载后将驱动的可执行文件路径配置到系统环境变量中。

ps:这里下载的ChromeDriver需要与您电脑上安装的Chrome 浏览器的主版本号保持一致,比如老wu写这篇文章时ChromeDriver的Last updated版本为133.0.6943.53,那么您电脑上Chrome主版本号也需要更新到对应的133.xxx版本。

代码实现

[*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*]import timefrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.chrome.service import Servicefrom bs4 import BeautifulSoup
# 配置 ChromeDriver 路径chrome_driver_path = 'path/to/chromedriver'# 请替换为你的 ChromeDriver 实际路径service = Service(chrome_driver_path)driver = webdriver.Chrome(service=service)
# 登录页面 URLlogin_url = 'https://abc.com/Login.php'driver.get(login_url)
# 等待用户手动登录input("请在浏览器中完成登录,登录完成后按回车键继续...")
# 初始化 Markdown 内容markdown_content = ""
# 循环爬取网页内容for id in range(1, 8216):    url = f'https://abc.com/browse_item.php?id={id}'    driver.get(url)    time.sleep(2)# 等待页面加载
    # 获取页面源代码    page_source = driver.page_source    soup = BeautifulSoup(page_source, 'html.parser')
    # 找到 workingarea 元素    working_area = soup.find('div', id='workingarea')    if working_area:      # 提取问题      question_div = working_area.find('div', class_='item_question')      if question_div:            question = question_div.get_text(strip=True)            markdown_content += f'### {question}
'
      # 提取答案      answer_div = working_area.find('div', class_='item_answer')      if answer_div:            answer = answer_div.get_text(strip=True)            markdown_content += f'{answer}
'
# 关闭浏览器driver.quit()
# 将 Markdown 内容保存到文件with open('doc.md', 'w', encoding='utf-8') as f:    f.write(markdown_content)
print("爬取完成,内容已保存到 doc.md 文件中。")
代码说明
[*]登录部分:使用selenium打开登录页面,等待用户手动完成登录操作,用户登录完成后按回车键继续。
[*]循环爬取:使用for循环遍历id从 1 到 8216的所有网页,依次打开网页并等待页面加载。
[*]内容提取:使用BeautifulSoup解析页面源代码,找到#workingarea元素,提取#workingarea > div.item_question和#workingarea > div.item_answer的内容,并添加相应的 Markdown 格式。
[*]保存文件:将提取的 Markdown 内容保存到doc.md文件中。

注意事项
[*]请将chrome_driver_path替换为你实际的 ChromeDriver 路径。
[*]由于网站可能存在反爬机制,爬取过程中可能会遇到验证码或其他限制,需要根据实际情况进行处理。
[*]爬取过程中可能会因为网络问题或页面加载缓慢导致提取内容失败,你可以适当调整time.sleep()的时间。

豆包给出的代码可以运行,但获取的结果老wu发现有点问题,这是老wu给的提示词不够准确,接着老wu再次提供了修正后的提示词:

“修改一下上边的需求,需要提取的是网页中的内的内容,其中的 提取为纯文本,并转换为markdown的H3标题格式,跳过的内容无需提取,提取内的内容为正文部分并保留原来html格式。其中的图片的src如果是相对路径的,如src="/images/11.png",则替换为绝对路径如:“https://abc.com/images/11.png”,提取内的内容为正文部分并保留原来html格式。”

然后豆包给出了修改后的代码,这回就完美解决了老wu的需求,包括程序的运行验证总共花了不到10分钟的时间搞定。ps:当然,这不包括实际抓取八千多页内容的时间,因为程序里设置了“time.sleep(2) # 等待页面加载”的等待逻辑,同时也可以避免触发服务器那边的反爬虫机制吧。

豆包根据修改后的提示词给出了修正后的代码:

[*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*]printf("hello world!");import timefrom selenium import webdriverfrom selenium.webdriver.chrome.service import Servicefrom bs4 import BeautifulSoup
# 请将此路径替换为你本地 ChromeDriver 的实际路径chrome_driver_path = 'path/to/chromedriver'service = Service(chrome_driver_path)driver = webdriver.Chrome(service=service)
# 登录页面的 URLlogin_url = 'https://abc/Login.php'driver.get(login_url)
# 等待用户手动完成登录操作input("请在浏览器中完成登录,登录完成后按回车键继续...")
# 初始化用于存储 Markdown 内容的字符串markdown_content = ""# 基础 URL,用于将图片的相对路径转换为绝对路径base_url = "https://abc.com"
# 循环爬取从 id=1 到 id=8216 的网页内容for id in range(1, 8216):    url = f'https://abc/browse_item.php?id={id}'    driver.get(url)    # 等待页面加载完成    time.sleep(2)
    # 获取当前页面的源代码    page_source = driver.page_source    # 使用 BeautifulSoup 解析页面源代码    soup = BeautifulSoup(page_source, 'html.parser')
    # 查找 td 标签且 id 为 workingarea 的元素    working_area = soup.find('td', id='workingarea')    if working_area:      # 提取问题部分,转换为纯文本并添加 Markdown 的 H3 标题格式      question_div = working_area.find('div', class_='item_question')      if question_div:            question_text = question_div.get_text(strip=True)            markdown_content += f'### {question_text}
'
      # 提取答案部分,处理图片的相对路径并保留 HTML 格式      answer_div = working_area.find('div', class_='item_answer')      if answer_div:            for img in answer_div.find_all('img'):                src = img.get('src')                if src and src.startswith('/'):                  img['src'] = base_url + src            answer_html = str(answer_div)            markdown_content += f'{answer_html}
'
      # 提取 r_linx 部分,处理图片的相对路径并保留 HTML 格式      r_linx_div = working_area.find('div', class_='r_linx')      if r_linx_div:            for img in r_linx_div.find_all('img'):                src = img.get('src')                if src and src.startswith('/'):                  img['src'] = base_url + src            r_linx_html = str(r_linx_div)            markdown_content += f'{r_linx_html}
'
# 关闭浏览器driver.quit()
# 将提取并处理好的 Markdown 内容保存到文件中with open('doc.md', 'w', encoding='utf-8') as f:    f.write(markdown_content)
print("爬取完成,内容已保存到 doc.md 文件中。")

然后,我们还可以让豆包对刚才生成的代码给出详细的分析,比如我们后续可以继续投喂提示词,如:

“基于最后一次的代码给出脑图”






写在最后

AI已来,其正以前所未有的速度渗透到我们生活和工作的方方面面,比如这次,老wu不用敲一行代码也不用任何的搜索,就能让AI生成完全符合老wu需求的python爬虫程序,感觉比老wu自己写的程序都好用。老wu也真切地感受到了AI浪潮带来的革命性的冲击,焦虑与迷茫也随之而来,也就是担心自己会被 AI 替代,毕竟,AI 在代码生成、测试等方面展现出了强大的能力,PCB Layout目前还好,但各大EDA厂商也正在加大力度开发基于AI的PCB Layout功能。

焦虑是面对变革时的正常情绪反应,克服焦虑的关键在于积极主动地去应对 AI 带来的变化。就好像百年前的黄包车夫面对汽车时代的来临,你必须调整心态和技能去适应新的时代的来临,比如黄包车夫可以考取驾照后成为出租车司机,并利用自己对城市道路熟悉的优势,地图上没有标注的小巷子你都能给客人带到,

照样不会被时代所淘汰。

AI 时代既充满了挑战,也蕴藏着无限机遇,调整心态、拥抱 AI 是顺应时代发展的必然选择,共勉。
页: [1]
查看完整版本: 太强了!平时需要三四天的工作量使用豆包AI直接干到10分钟搞定