使用ChatGPT将大容量HTML输入到Claude中

了解如何使用Claude来处理大容量HTML输入,以及Claude的功能、HTML分析和网页数据提取方法。

7
使用ChatGPT将大容量HTML输入到Claude中

Claude(Claude)限定交易平台,Kream:https://kream.co.kr的实时图表爬虫示例准备好了。

1. Claude是什么?

notion image

Claude(Claude)是由OpenAI员工创立并得到Google强力支持的人工智能初创公司Anthropic的AI聊天机器人服务。

Claude 2于2023年7月11日发布,大约3个月后的10月17日也在韩国发布。

Claude不仅支持韩语聊天,还提供上传最多5个最大为10MB的PDF、TXT、CSV文件的功能。在提示符中支持10万个令牌,可以输入比GPT-4(最多32,768个)更多的令牌。

2. 使用Claude解析HTML

现在让我们尝试爬取Kream实时图表中的价格变动信息。

notion image

复制包含产品列表的<ul>标签的HTML以请求分析。

在之前的使用ChatGPT构建Coupang爬虫机器人帖子中,GPT-4的令牌数量是个问题。我们来看看GPT-4能否分析这个HTML?

notion image

由于令牌数量限制,无法处理。

那么Claude呢?

notion image

首先,Claude会将HTML保存为txt文件进行分析。

分析结果显示,除了产品信息外,还分析了HTML标签信息和使用的库。可以根据分析结果确定可以收集哪些信息。

3. 使用Claude提取Web数据

现在让我们正式向Claude询问用于数据提取的代码。

3.1. 编写提示符

我输入了以下提示符。

셀레니움으로 웹 페이지 데이터를 추출하고자 해. 언어는 Python을 사용해줘.
위 HTML에서 상품 이미지 URL, 상품명, 모델 번호, 사이즈, 가격, 가격 변동, 가격 변동 비율을 가져와줘.
위 항목은 모두 필수 데이터이므로 해당 데이터가 없다면 나에게 어떤 데이터를 찾을 수 없는지 오류 메시지를 전달해야 해.
모든 HTML element는 xpath로 찾아줘.
위 조건을 가지고 JSON 형식으로 데이터를 출력해줘.

3.2. 第一次响应

notion image

如上图所示,编写了使用Selenium查找xpath并获取数据的代码。

然而,最新版本的Selenium不支持find_element_by_xpath,因此我请求进行以下修改。

내 셀레니움 버전에서는 `find_element_by_xpath`를 사용할 수 없어.
`By`를 import해서 `find_element`로 요소를 찾도록 수정해줘.

3.3. 第二次响应

notion image

已修改为使用find_elementBy

以下是Claude提供的完整代码。

from selenium import webdriver
from selenium.webdriver.common.by import By
import json

driver = webdriver.Chrome()

driver.get("<https://www.example.com>")

products = []

items = driver.find_elements(By.XPATH, "//ul[@class='trading-items-container']/li")
for item in items:

  try:
    img_url = item.find_element(By.XPATH, ".//picture/img").get_attribute("src")
  except:
    img_url = "Image URL not found"

  try:
    name = item.find_element(By.XPATH, ".//div[contains(@class,'name')]").text
  except:
    name = "Name not found"

  try:
    code = item.find_element(By.XPATH, ".//div[contains(@class,'style-code')]").text
  except:
    code = "Code not found"

  try:
    size = item.find_element(By.XPATH, ".//div[contains(@class,'option')]").text
  except:
    size = "Size not found"

  try:
    price = item.find_element(By.XPATH, ".//div[contains(@class,'current-price')]").text
  except:
    price = "Price not found"

  try:
    change = item.find_element(By.XPATH, ".//div[contains(@class,'change-price')]/span").text
  except:
    change = "Price change not found"

  try:
    change_pct = item.find_element(By.XPATH, ".//div[contains(@class,'change-percent')]").text.split()[0]
  except:
    change_pct = "Change percentage not found"

  product = {
    "image": img_url,
    "name": name,
    "code": code,
    "size": size,
    "price": price,
    "price_change": change,
    "price_change_pct": change_pct
  }

  products.append(product)

print(json.dumps(products, indent=2))

driver.quit()

从代码中可以看出,从异常处理到以json格式输出,都满足了提示符的要求。

3.4. 第一次修改

我们似乎只需要修改Chrome驱动程序设置。

从导入包到打开Chrome浏览器的代码已更改如下。

import json
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By

url = "<https://kream.co.kr/trading-chart>"
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
driver.get(url)

3.5. 第一次执行

好了,现在一切准备就绪,让我们来运行一下吧?

[
  {
    "image": "<https://kream-phinf.pstatic.net/MjAyMzA0MDNfMTE1/MDAxNjgwNDkxOTQ4NjQ0.W-mLA596MM6US4gSI6jNsJ9NhCbIeUR5mg0qxQ6p_AUg.Ec1REyClrXQ38dSM40zZhVidrYf0gxBsnc7C1SqK71kg.JPEG/a_e78ed04e3a1948a09a7b26bff5b27634.jpg?type=m>",
    "name": "Nike x Peaceminusone LS T-Shirt Black (DR0098-010)",
    "code": "DR0098-010",
    "size": "M",
    "price": "152,000",
    "price_change": "\u25b2",
    "price_change_pct": "+1.3%"
  },
  {
    "image": "<https://kream-phinf.pstatic.net/MjAyMTAxMjBfNTAg/MDAxNjExMTIyMzAzMTY2.0QpenidH075iEa1_gVzZTKOxJPiB8W6KyX4YmiELcfIg.ydUN0Aq9T8nWA5frqrsbwnbFfsNMNHDx6ezU5WxGAfQg.PNG/p_28c110281b3f4e109e30a6247d503e2a.png?type=m>",
    "name": "Nike Dunk Low Pro Premium Medium Curry",
    "code": "DD1390-100",
    "size": "255",
    "price": "107,000",
    "price_change": "\u25b2",
    "price_change_pct": "+0.9%"
  },
  {
    "image": "<https://kream-phinf.pstatic.net/MjAyMTAzMDVfMjQz/MDAxNjE0OTE0NzIzMTQ4.tsuFUJtHGm4g4KE5EDikVMScORptOQqIB7afi1Nz2Qwg.sftz3YQOuw48xpNSJa1tV4uEsz5iU4mjIvpllgHWEn8g.PNG/p_8f7b72adbc924b5bbf7c670d55865e6b.png?type=m>",
    "name": "Adidas Samba OG Cloud White",
    "code": "B75806",
    "size": "215",
    "price": "130,000",
    "price_change": "\u25b2",
    "price_change_pct": "+0.8%"
  }
]
<div data-v-4f90d828="" class="change-price up" style="color: rgb(241, 87, 70);">
  <span data-v-4f90d828="" class="arrow">▲</span>
  <span data-v-4f90d828="">27,000</span>
</div>

几乎成功获取了所有信息,但由于HTML结构如上所示,只获取了对应的\\u25b2字符,未能获取变动金额。

3.6. 第二次修改

为了获取变动金额,我们进行以下修改:

try:
    change = item.find_element(By.XPATH, ".//div[contains(@class,'change-price')]").text.replace("\u25bc", "-").replace("\u25b2", "+")
except:
    change = "Price change not found"

3.7. 第二次执行

再次运行的结果:

[
  {
    "image": "<https://kream-phinf.pstatic.net/MjAyMTA3MzBfNTYg/MDAxNjI3NjI3OTg5ODM5.p-9pRcc3cQ_eaTl7UZdCmPJz8Astbjg2N6_HkEhLrHsg.ekjxXxJ-kcnoaZC6gCQH_-KBCUJORPTRC791UZ_C3ukg.PNG/p_e1ef5e002eda49adb7f5d0c8a41f798d.png?type=m>",
    "name": "Jordan 1 x Travis Scott x Fragment Retro Low OG SP Military Blue",
    "code": "DM7866-140",
    "size": "260",
    "price": "1,875,000",
    "price_change": "+27,000",
    "price_change_pct": "+1.5%"
  },
  {
    "image": "<https://kream-phinf.pstatic.net/MjAyMzA0MDNfMTE1/MDAxNjgwNDkxOTQ4NjQ0.W-mLA596MM6US4gSI6jNsJ9NhCbIeUR5mg0qxQ6p_AUg.Ec1REyClrXQ38dSM40zZhVidrYf0gxBsnc7C1SqK71kg.JPEG/a_e78ed04e3a1948a09a7b26bff5b27634.jpg?type=m>",
    "name": "Nike x Peaceminusone LS T-Shirt Black (DR0098-010)",
    "code": "DR0098-010",
    "size": "M",
    "price": "152,000",
    "price_change": "+2,000",
    "price_change_pct": "+1.3%"
  },
  {
    "image": "<https://kream-phinf.pstatic.net/MjAyMjEwMTJfMjQ3/MDAxNjY1NTYyODI3ODMw.YeSueVotfq5mgVXlQIVeV-uL_Q2otMk6nkvlbG2rHncg.vMJPWgosd9OjOn-s75jjEnjk44sB1gNqftQSN8CEkTAg.PNG/a_b2325461062d47e2887459a3e6928d88.png?type=m>",
    "name": "Adidas Puffylette Core Black",
    "code": "GY4559",
    "size": "265",
    "price": "78,000",
    "price_change": "+1,000",
    "price_change_pct": "+1.3%"
  }
]

现在变动金额和方向都能正确显示了。

4. 结论

通过使用Claude创建了Kream实时图表爬虫。

Claude支持上传最大10MB的文件,因此可以分析长HTML。

要求ChatGPT创建爬虫时需要缩小HTML大小,但Claude展示了处理长HTML没有问题。

虽然响应速度比ChatGPT慢,但没有令人失望的地方。

总的来说,对于创建网络爬虫,我认为Claude比ChatGPT更有用。

也可以阅读这篇文章:

数据收集,现在自动化

无需编码,5分钟即可开始·5000多个网站爬取经验

免费开始 →

Comments

Add Comment

Your email won't be published and will only be used for reply notifications.

继续阅读

Get notified of new posts

We'll email you when 해시스크래퍼 기술 블로그 publishes new content.

Your email will only be used for new post notifications.