使用ChatGPT创建一个Coupang爬虫机器人:从搜索结果中提取商品信息

详细了解如何利用ChatGPT创建一个Coupang爬虫机器人。轻松理解从搜索结果中提取商品信息的过程。

6,787
使用ChatGPT创建一个Coupang爬虫机器人:从搜索结果中提取商品信息
目录

0. 概述

如今,由于ChatGPT,开发变得非常容易。

如果与ChatGPT一起,爬虫机器人也能轻松创建吗?

让我们开始开发一个Coupang爬虫机器人(带ChatGPT)。

1. 编写提示

1.1. 目标

希望从搜索结果中提取每个产品的基本信息。

  • 产品名称

  • 原价

  • 销售价

  • 评分

  • 评论数量

  • 卡片折扣信息

  • 积分信息

  • 配送信息

1.2. 查找产品列表HTML

让我们找到包含产品列表的HTML元素

notion image

id为productListul是产品列表,其中的每个li是产品元素。

那么,我们复制上面的ul HTML并询问ChatGPT吧?

1.3. 缩小HTML大小

notion image

由于ChatGPT有令牌数限制,无法处理像上面的ul这么大的HTML。

我们需要缩小HTML的大小,因此复制ul的第一个li HTML并再次询问。

1.4. 考虑提示的要点

在编写提示之前,让我们总结一下需要考虑的事项。

1⃣ 对产品列表中的所有 **li**进行循环

收集//ul[@id="productList"]中的所有产品。

2⃣ 删除广告产品

notion image

如果类中包含search-product__ad-badge,则表示是广告产品,不应收集该产品。

1.5. 编写ChatGPT提示

我们使用了GPT-4,并输入了以下提示。

<<li의 HTML>>

상품 정보를 담고 있는 위의 HTML에서 상품 이름, 가격, 정가, 별점, 리뷰 개수, 카드 할인, 적립 정보, 배송 정보를 가져오는 웹 크롤러를 셀레니움을 사용하여 만들어 줘.

이 li 요소는 "//ul[@id='productList']" 안에 있으므로, 상품 리스트를 가져와 그 안의 li 태그에 대해 수집 작업을 반복하도록 코드를 생성해 줘.

class에 search-product__ad-badge가 포함되어 있는 경우 광고 상품이므로 해당 상품은 스킵해.

수집 내용을 콘솔에 출력할 때 각 상품마다 서로 구별될 수 있도록 구분선을 추가해 줘.

1.6. ChatGPT编码结果

## import 및 크롬 드라이버 설정 생략 ##

# 웹페이지 열기
driver.get('<https://www.coupang.com/np/search?component=&q=%EC%95%84%EC%9D%B4%ED%8C%A8%EB%93%9C+%EC%97%90%EC%96%B4+5&channel=auto>')

# 상품 리스트 가져오기
product_list = driver.find_element(By.XPATH, "//ul[@id='productList']")

# BeautifulSoup으로 파싱
soup = BeautifulSoup(product_list.get_attribute('outerHTML'), 'html.parser')

# 광고 상품 제외하고 각 상품 정보 가져오기
for product in soup.find_all('li', class_='search-product'):
    # 광고 상품인 경우 스킵
    if product.find(class_='search-product__ad-badge'):
        continue

    product_name = product.find("div", class_="name").text.strip()
    original_price = product.find("del", class_="base-price").text.strip()
    sale_price = product.find("strong", class_="price-value").text.strip()
    rating = product.find("em", class_="rating").text.strip()
    review_count = product.find("span", class_="rating-total-count").text.strip()
    card_discount = product.find("span", class_="ccid-txt").text.strip() if product.find("span", class_="ccid-txt") else "N/A"
    reward_info = product.find("span", class_="reward-cash-txt").text.strip() if product.find("span", class_="reward-cash-txt") else "N/A"
    delivery_info = product.find("span", class_="arrival-info").text.strip()

    # 콘솔에 출력
    print('-'*40)
    print("상품 이름:", product_name)
    print("정가:", original_price)
    print("판매 가격:", sale_price)
    print("별점:", rating)
    print("리뷰 개수:", review_count)
    print("카드 할인 정보:", card_discount)
    print("적립 정보:", reward_info)
    print("배송 정보:", delivery_info)

driver.quit()

2. 调试

如果运行ChatGPT生成的代码,很可能无法正常运行。

就像这个例子一样,我们立即遇到了以下错误:

Traceback (most recent call last):
  File "/Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/pydevconsole.py", line 364, in runcode
    coro = func()
  File "<input>", line 13, in <module>
AttributeError: 'NoneType' object has no attribute 'text'

现在让我们看一下调试过程。

2.1. AttributeError: 'NoneType' object has no attribute 'text'

问题

查看提取产品名称的代码。

product_name = product.find("div", class_="name").text.strip()

这是用于查找具有产品名称的元素并提取文本的代码。

但是,如果找不到类为"name"divproduct.find("div", class_="name")将变为'NoneType'对象。

由于无法从None中提取文本,因此会发生AttributeError。

解决

让我们分情况解决。

notion image

notion image

如上图所示,每个产品的信息量可能不同。

因此,我们打算将信息分为两类。

必需信息

产品名称、价格等必须存在的信息不能是None

如果是这种情况,应该引发错误。

try:
    # 요소를 찾음
    product_name = product.find("div", class_="name").text.strip()
except AttributeError:
    # 에러 발생 시 raise
    raise AttributeError("상품 이름을 가져오는 중 에러가 발생했습니다.")

可选信息

对于像评论数量这样可选的信息,需要进行其他处理。

如果找不到包含信息的元素,则将变量分配为None

# 요소를 찾음
review_count_span = product.find("span", class_="rating-total-count")
# 요소가 None이라면 변수에 None 할당
review_count = review_count_span.text.strip() if review_count_span else None

也可以这样写成一行:

review_count_span = product.find("span", class_="rating-total-count").text.strip() if product.find("span", class_="rating-total-count") else None

2.2. 跳过广告产品

提示中包含以下内容。

class에 search-product__ad-badge가 포함되어 있는 경우 광고 상품이므로 해당 상품은 스킵해.

ChatGPT生成了以下代码:

for product in soup.find_all('li', class_='search-product'):
    # 광고 상품인 경우 스킵
    if product.find(class_='search-product__ad-badge'):
        continue
    # ...후략

问题

在上面的代码中,如果找到类为'search-product__ad-badge'的元素,将跳过。

问题在于这是在product内部元素中查找该类。

这可能是因为我没有准确编写提示导致的问题,但让我们尝试解决一下。

解决

if 'search-product__ad-badge' in product['class']:
    continue

我们已经修改了循环中跳过条件,使其在product的类中包含'search-product__ad-badge'

2.3. 调整不完整的URL

运行爬虫机器人后,我们获得了以下产品URL。

상품 URL: /vp/products/6396408893?itemId=13659935611&vendorItemId=80912364532&pickType=COU_PICK&q=%EC%95%84%EC%9D%B4%ED%8C%A8%EB%93%9C+%EC%97%90%EC%96%B4+5&itemsCount=36&searchId=c12ac6801b8042dbbe20f91a2e875bc0&rank=1

问题

在使用BeautifulSoup解析HTML并收集数据时,href属性中可能不会完全显示URL。

通过比较上面的URL和实际URL,我们可以看到前面缺少了https://www.coupang.com/

解决

让我们添加URL的前缀。

product_url = "https://www.coupang.com" + product.find('a', class_='search-product-link')['href']

3. 检查收集结果

让我们查看经过修改的爬虫机器人收集的数据。

----------------------------------------
상품 URL: <https://www.coupang.com//vp/products/6396408893?itemId=13659935634&vendorItemId=80912364549&q=%EC%95%84%EC%9D%B4%ED%8C%A8%EB%93%9C+%EC%97%90%EC%96%B4+5&itemsCount=36&searchId=e5fbb32250614118b4a65b814ec1b9ae&rank=10>
상품 이름: Apple 2022 아이패드 에어 5세대, 스타라이트, 256GB, Wi-Fi
정가: 1,169,000
판매 가격: 1,098,860
별점: 5.0
리뷰 개수: (17833)
카드 할인 정보: 최대 1% 카드 즉시할인
적립 정보: 최대 50,000원 적립
배송 정보: 내일(목)   도착 보장
----------------------------------------
상품 URL: <https://www.coupang.com//vp/products/1947960654?itemId=5913484902&vendorItemId=83384415356&sourceType=SDW_TOP_SELLING_WIDGET_V2&searchId=e5fbb32250614118b4a65b814ec1b9ae&q=아이패드> 에어 5
상품 이름: 케이안 애플펜슬 수납 마그네틱 태블릿PC 커버 매트 폴리오 케이스, 차콜그레이
정가: 33,150
판매 가격: 30,960
별점: 5.0
리뷰 개수: (6498)
카드 할인 정보: 최대 4% 카드 즉시할인
적립 정보: 최대 1,548원 적립
배송 정보: 내일(목)   도착 보장
----------------------------------------
상품 URL: <https://www.coupang.com//vp/products/5540742883?itemId=8726176862&vendorItemId=79466342181&sourceType=SDW_TOP_SELLING_WIDGET_V2&searchId=e5fbb32250614118b4a65b814ec1b9ae&q=아이패드> 에어 5
상품 이름: 신지모루 애플펜슬 수납 아이패드 클리어 케이스 + 강화유리 2P, 웜그레이
정가: 26,900
판매 가격: 25,900
별점: 5.0
리뷰 개수: (1313)
카드 할인 정보: 최대 2% 카드 즉시할인
적립 정보: 최대 1,295원 적립
배송 정보: 내일(목)   도착 보장

尽管这是一个简单的收集仅显示在搜索结果中的产品的爬虫机器人,但我们可以获得相当多的信息!

4. 结论

到目前为止,我们通过ChatGPT查看了爬取Coupang搜索结果的过程。ChatGPT是一个非常有用的工具,但需要一些调试和修改。尽管如此,我们仍然可以获得相当有用的结果。

然而,要顺利地收集Coupang搜索结果,需要考虑许多因素。由于Coupang能够快速检测和阻止机器人,因此需要有效地规避这一点,并且如果要收集根据登录状态而变化的信息,则需要进行额外的工作。这些限制会使爬取工作变得复杂,从而给准确和快速的信息收集带来困难。

要有效解决这些问题,需要专业的工具和服务。Hashscraper提供专业的网络爬虫服务,可以解决这些复杂的问题。您可以轻松快速地收集Coupang的各种信息。

通过本文,我们了解了如何使用ChatGPT开发网络爬虫。虽然有许多工具和方法,但如果希望实现高效和准确的信息收集,建议使用专业服务。

谢谢。

也可以阅读这篇文章:

数据收集,现在自动化

开始无需编码,5分钟内开始·超过5,000个网站的爬取经验

免费开始 →

评论

发表评论

您的邮箱不会公开,仅用于回复通知。

继续阅读

Get notified of new posts

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

Your email will only be used for new post notifications.