要获取这个网页上的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进行逐页请求,直到无法找到更多内容为止。
防反爬虫机制:设置请求头模拟浏览器访问。
每次请求后随机延时,避免触发反爬虫机制。
你可以根据需求进一步优化或调整代码。
程序运行成功
本文分享自 Dance with GenAI 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!