前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AI网络爬虫:ChatGPT调用Playwright爬取动态网页内容

AI网络爬虫:ChatGPT调用Playwright爬取动态网页内容

作者头像
AIGC部落
发布2024-09-29 10:54:19
750
发布2024-09-29 10:54:19
举报
文章被收录于专栏:Dance with GenAI

要获取这个网页上的https://dang.ai/ai-graveyard的内容,首先查看翻页逻辑

https://dang.ai/ai-graveyard?page=1

https://dang.ai/ai-graveyard?page=2

https://dang.ai/ai-graveyard?page=3

然后爬取内容的定位:

在ChatGPT输入提示词:

你是一个Python编程专家,要完成一个爬取网页的任务,具体步骤如下:

打开文件夹:F:\aivideo,新建一个Excel文件,文件名为:ai-graveyard.xlsx

用Playwright 打开网页:https://dang.ai/ai-graveyard?page={pagenumber},pagenumber从1开始,每次加1,以22结束;

定位网页中所有class="voting-collection-list_item w-dyn-item"的div元素,在div元素中定位class="voting-item-name_text"的a元素,提取其文本内容,写入Excel表格第1列;在div元素中定位class="voting-item-description_text text-style-2lines"的div元素,提取其文本内容,写入Excel表格第2列;定位class="voting-categories_link"的第1个a元素,提取其文本内容,写入Excel表格第3列;定位class="voting-categories_link"的第2个a元素,提取其文本内容,写入Excel表格第4列;定位class="voting-categories_link"的第3个a元素,提取其文本内容,写入Excel表格第5列;定位class="item-upvote-count_text jetboost-item-total-favorites-zjxx"的div元素,提取其文本内容,写入Excel表格第6列;

注意:如果没有定位到相关元素,就写入空值;

每一步都要输出信息到屏幕上;

要有应对反爬虫的措施;

ChatGPT的回复:

这是一个复杂的爬虫任务,需要使用Python中的requests和BeautifulSoup来抓取网页内容,并使用openpyxl来处理Excel文件。为了应对反爬虫机制,可以加入请求头、设置延时以及使用代理。

下面是一个解决方案的代码示例,涵盖了你提出的所有要求

import time

import random

from openpyxl import Workbook

from playwright.sync_api import sync_playwright

# 创建Excel文件

file_path = r"F:\aivideo\ai-graveyard.xlsx"

wb = Workbook()

ws = wb.active

ws.title = "AI Graveyard"

# 设置Excel表头

ws.append(["名称", "描述", "类别1", "类别2", "类别3", "点赞数"])

# 反爬虫措施:随机等待时间

def random_sleep(min_sec=1, max_sec=3):

time.sleep(random.uniform(min_sec, max_sec))

# 启动Playwright并打开网页

with sync_playwright() as p:

browser = p.chromium.launch(headless=False) # 设置为True则无头浏览器

# 创建新的浏览器上下文,设置User-Agent

context = browser.new_context(user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36')

# 打开新页面

page = context.new_page()

for page_number in range(1, 23): # 页数从1到22

url = f"https://dang.ai/ai-graveyard?page={page_number}"

print(f"正在爬取第{page_number}页: {url}")

page.goto(url)

random_sleep(2, 5) # 随机延时应对反爬虫

# 定位所有class="voting-collection-list_item w-dyn-item"的div元素

items = page.query_selector_all('div.voting-collection-list_item.w-dyn-item')

for item in items:

# 提取名称

name = item.query_selector('a.voting-item-name_text')

name_text = name.inner_text().strip() if name else ""

# 提取描述

description = item.query_selector('div.voting-item-description_text.text-style-2lines')

description_text = description.inner_text().strip() if description else ""

# 提取类别1、2、3

categories = item.query_selector_all('a.voting-categories_link')

category1 = categories[0].inner_text().strip() if len(categories) > 0 else ""

category2 = categories[1].inner_text().strip() if len(categories) > 1 else ""

category3 = categories[2].inner_text().strip() if len(categories) > 2 else ""

# 提取点赞数

upvote = item.query_selector('div.item-upvote-count_text.jetboost-item-total-favorites-zjxx')

upvote_text = upvote.inner_text().strip() if upvote else ""

# 输出当前项内容

print(f"名称: {name_text}, 描述: {description_text}, 类别1: {category1}, 类别2: {category2}, 类别3: {category3}, 点赞数: {upvote_text}")

# 写入Excel

ws.append([name_text, description_text, category1, category2, category3, upvote_text])

# 每爬完一页保存一次Excel文件

wb.save(file_path)

print(f"第{page_number}页爬取完成,已保存到Excel")

# 关闭浏览器

browser.close()

print("所有页面爬取完成!")

代码说明:

Excel处理:使用openpyxl库创建和写入Excel文件。

网页请求和解析:使用requests获取网页内容,并用BeautifulSoup解析HTML。

数据提取:根据提供的CSS类选择器,逐一提取页面中的各项数据。如果某个元素没有找到,则写入空值。

翻页逻辑:使用pagenumber进行逐页请求,直到无法找到更多内容为止。

防反爬虫机制:设置请求头模拟浏览器访问。

每次请求后随机延时,避免触发反爬虫机制。

你可以根据需求进一步优化或调整代码。

程序运行成功

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Dance with GenAI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档