网站首页 > 基础教程 正文
今天尝试用kimi去爬取网站,下载文档。选了一个比较简单的网站。http://orthomolecular.org/resources/omns/index.shtml。这里面包含了大量的pdf文献下载链接。有1300多份,看Kimi是否能提供代码去下载这些文档
kimi的回答:
我已经阅读了您提供的网址中的HTML代码内容。这个页面是《Orthomolecular News Service》的新闻发布索引页面,列出了不同年份和月份的新闻标题。这些新闻主要关注营养、健康、医学和公共卫生话题,特别是关于维生素和补充剂的使用。
页面列出了从2024年4月22日到2005年3月23日的新闻发布,每条新闻都有对应的卷号、期号、发布日期和主题。例如,最新的新闻发布是关于纪念Burt Berkson博士的逝世,而其他的新闻发布则涵盖了间歇性禁食、心脏协会对间歇性禁食研究的不负责任的新闻发布、NAD+和烟酸在长寿和健康中的作用等主题。
此外,页面还提供了订阅《Orthomolecular Medicine News Service (OMNS)》的选项,以便通过电子邮件接收最新的新闻发布。
如果您有关于这些新闻发布或该网站的具体问题,请告诉我,我会尽力帮助您
从kimi的回答来看,kimi似乎是学习了这个网站的内容,我的本意是要让kimi学习这个网站的html结构,然后提供代码下载pdf
kimi的回答:
要下载一个网站上所有PDF文件,您需要使用Python的一些库,如requests来处理网络请求和BeautifulSoup来解析HTML内容。以下是一个简单的Python脚本示例,它尝试找到所有具有PDF后缀的<a>标签,并下载相应的文件。
请注意,这个脚本假定所有的PDF链接都是直接链接到PDF文件的HTTP URL。如果链接是通过JavaScript动态生成的,或者在点击时重定向到PDF文件,那么可能需要更复杂的方法来处理。
此外,由于我不能实际执行代码或确认链接的有效性,以下代码可能需要根据您的具体需求进行调整:
kimi提供了下载的思路,果然和我之前想的一样,kimi还不能智能到学习html的结构,然后根据我的需要去下载想要的东西
kimi提供的代码如下:
import requests
from bs4 import BeautifulSoup
import os
# 网址
url = "http://orthomolecular.org/resources/omns/index.shtml"
# 发送HTTP请求
response = requests.get(url)
response.raise_for_status() # 如果请求失败,将抛出异常
# 解析HTML内容
soup = BeautifulSoup(response.text, 'html.parser')
# 找到所有的链接
links = soup.find_all('a', href=True)
# 用于存储PDF文件的目录
pdf_directory = 'pdf_files'
if not os.path.exists(pdf_directory):
os.makedirs(pdf_directory)
# 遍历所有的链接,下载PDF文件
for link in links:
href = link['href']
if href.lower().endswith('.pdf'):
# 完整的PDF文件URL
pdf_url = url + '/' + href if href.startswith('/') else href
# 从URL中提取文件名
filename = os.path.basename(pdf_url)
# 下载PDF文件
with open(os.path.join(pdf_directory, filename), 'wb') as f:
pdf_response = requests.get(pdf_url)
pdf_response.raise_for_status() # 如果请求失败,将抛出异常
f.write(pdf_response.content)
print(f"Downloaded {filename}")
print("All PDFs have been downloaded.")
从代码看,Kimi是提取了</a>下所有的href元素并下载。查看这个网站的HTML代码,可以看到href不但包括pdf的,还包括链接跳转到其他shtml。而我们的需求是下载pdf文件
继续提需求,让kimi只下载pdf
import requests
from bs4 import BeautifulSoup
import os
# 目标网址
url = "http://orthomolecular.org/resources/omns/index.shtml"
# 发送HTTP请求,获取网页内容
response = requests.get(url)
response.raise_for_status() # 确保请求成功
# 使用BeautifulSoup解析HTML内容
soup = BeautifulSoup(response.text, 'html.parser')
# 查找所有的<a>标签
a_tags = soup.find_all('a', href=True)
# 用于存储PDF文件的目录
pdf_directory = 'pdf_files'
if not os.path.exists(pdf_directory):
os.makedirs(pdf_directory)
# 遍历所有的<a>标签
for tag in a_tags:
href = tag['href']
if href.lower().endswith('.pdf'):
# 完整的PDF文件URL
pdf_url = href # 假设所有的PDF链接都是绝对路径
# 从URL中提取文件名
filename = os.path.basename(pdf_url)
# 构建完整的文件保存路径
file_path = os.path.join(pdf_directory, filename)
try:
# 发送请求,下载PDF文件
pdf_response = requests.get(pdf_url, stream=True)
pdf_response.raise_for_status() # 确保请求成功
with open(file_path, 'wb') as f:
for chunk in pdf_response.iter_content(chunk_size=8192):
f.write(chunk)
print(f"Downloaded {filename}")
except Exception as e:
print(f"Failed to download {pdf_url}, error: {e}")
print("Finished downloading PDFs.")
可以看到上面的代码已经增加了功能,过滤了href中不是以pdf结尾的。只下载pdf结尾的。代码运行。也满足了我们的需求。该网站1000+个PDF文件成功下载
-----------继续优化-----------
那么这个功能还能继续优化么,转换下思路,如果我把这个网站的HTML代码保存成txt文档,然后让kimi去学习这个文档,然后根据我的要求来下载。这个方法是否可行?
1 首先我将网站的源代码保存成txt文档,然后上传给kimi
2 提供完整的提示词
提供的代码如下
import requests
from bs4 import BeautifulSoup
import os
import re
from urllib.parse import urljoin
# 目标网页的URL
url = '你的目标网页URL'
# 伪装成浏览器的headers
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'
}
# 发送HTTP请求
response = requests.get(url, headers=headers)
response.raise_for_status() # 如果请求失败,将抛出异常
# 使用BeautifulSoup解析HTML内容
soup = BeautifulSoup(response.text, 'html.parser')
# 查找所有的a标签,提取href属性
links = soup.find_all('a', href=True)
# 正则表达式匹配PDF链接
pdf_pattern = re.compile(r'\.pdf', re.IGNORECASE)
# 存储所有PDF的链接
pdf_links = [urljoin(url, link['href']) for link in links if pdf_pattern.search(link['href'])]
# 下载PDF文档
for pdf_link in pdf_links:
# 发送请求下载PDF
pdf_response = requests.get(pdf_link, headers=headers)
pdf_response.raise_for_status()
# 从链接中提取PDF文件名
filename = re.findall(r'/([\w_-]+(\.\w+))#39;, pdf_link)[0][0]
# 写入文件系统
with open(filename, 'wb') as f:
f.write(pdf_response.content)
print(f'Downloaded {filename}')
print('All PDFs have been downloaded.')
这个代码比较完善了,根据我的提示词,kimi提供了header数据的组装。避免被认为是爬虫。
总结:
今天尝试让kimi变身一个爬虫工程师,但是结果还是有遗憾,kimi现在还不具备分析网站的功能。但是如果你能准确的告诉kimi,具体要爬哪些内容,爬虫的条件是什么。kimi还是能很好的完成工作
猜你喜欢
- 2024-11-04 苹果更新App 隐私保护说明 下载前可充分了解隐私权限
- 2024-11-04 HTML5 video 视频标签属性详解——前端小白必学知识
- 2024-11-04 实现PDF的预览和下载功能 pdf预览快捷键是什么
- 2024-11-04 标签制作软件如何制作学校标签 制作标签的软件有哪些
- 2024-11-04 标签制作软件如何制作商品标签模板
- 2024-11-04 标签制作软件如何制作配电箱标签 配电箱标签框
- 2024-11-04 Maven 的这 7 个问题你思考过没有?
- 2024-11-04 如何制作通用防伪标签 如何制作通用防伪标签图片
- 2024-11-04 Blob文件下载方式 blob如何下载
- 2024-11-04 MCGS触摸屏标签使用方法一 mcgs触摸屏功能
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- 单例 (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)