前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AI网络爬虫:批量爬取抖音视频搜索结果

AI网络爬虫:批量爬取抖音视频搜索结果

作者头像
AIGC部落
发布2024-06-24 19:22:21
1240
发布2024-06-24 19:22:21
举报
文章被收录于专栏:Dance with GenAIDance with GenAI

任务:批量爬取抖音视频的搜索结果内容,包括视频标题,视频地址和视频创作者等信息。

定位到元素位置:

<div class="ILGAlGLX">《梅西的Al道歉》 本年度最佳 Al视频,看来梅西还想在中国淘金,这才是真正的“商业头脑”#梅西 #梅西道歉 #Sora #数字人</div>

href="//http://www.douyin.com/video/7340197363010637093"

在ChatGPT中输入提示词:

你是一个Python爬虫专家,一步步的思考,完成以下网页爬取的Python脚本任务:

在F:\aivideo文件夹里面新建一个Excel文件:douyinchatgpt.xlsx

设置chromedriver的路径为:"D:\Program Files\chromedriver125\chromedriver.exe"

设置网页编码为:charset=utf-8

用selenium打开网页:https://www.douyin.com/search/ChatGPT?type=video;

等待网页加载,延迟50秒;

解析源代码,并打印输出;

selenium控制滚动条滚动到网页最底部,使数据全加载出来:使用一个无限循环来模拟滚动条的滚动,直到滚动条到达页面底部。在每个循环迭代中,都记录前一个页面高度(prev_height),然后使用JavaScript滚动到页面底部。停顿10秒钟,以便页面可以加载更多内容。然后,再次使用JavaScript来获取新页面高度,并检查它是否等于以前的高度。如果它们相等,说明已经滚动到了页面底部,可以退出循环。

定位class="HN50D2ec Z3LKqldT"的li 标签;

在li 标签中定位css选择器=#search-content-area > div > div.aS8_s2bj > div.fSYtCCtg > div:nth-child(2) > ul > li:nth-child(titlenumber) > div > a > div > div.d2yYYhwo > div > div.ILGAlGLX的div标签(titlenumber从1开始,并以1 为增量增加),作为视频标题,保存到douyinchatgpt.xlsx的第1列;

在li 标签中定位css选择器=#search-content-area > div > div.aS8_s2bj > div.fSYtCCtg > div:nth-child(2) > ul > li:nth-child(pnumer) > div > a > div > div.d2yYYhwo > div > div.oBbvFsS9 > span.ehgTdQCP > span.k7fHrf54的span标签(pnumer从1开始,并以1 为增量增加),作为视频博主,保存到douyinchatgpt.xlsx的第2列;

在li 标签中定位#search-content-area > div > div.aS8_s2bj > div.fSYtCCtg > div:nth-child(2) > ul > li:nth-child(tnumber) > div > a > div > div.d2yYYhwo > div > div.oBbvFsS9 > span.H_OXalNs的span标签(tnumer从1开始,并以1 为增量增加),作为视频发布时间,保存到douyinchatgpt.xlsx的第3列;

在li 标签中定位css选择器=#search-content-area > div > div.aS8_s2bj > div.fSYtCCtg > div:nth-child(2) > ul > li:nth-child(urlnumber) > div > a的a标签(urlnumber从1开始,并以1 为增量增加),提取其href属性值,作为视频链接,保存到douyinchatgpt.xlsx的第4列;

数据写入Excel时,要注意DataFrame.append 方法在 pandas 1.4.0 版本中已经被弃用,并且在后续版本中被移除。为了解决这个问题,我们可以使用 concat 函数来代替 append

注意:

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

每爬取一个li 标签里面的内容,就随机暂停5-10秒;

设置请求头,来应对反爬虫机制;

代码不要分成一段一段的,整合在一起;

不要开启无头模式;

在Selenium 4中,executable_path参数已经被弃用,取而代之的是service参数;

DataFrame.append 方法在 pandas 1.4.0 版本中已经被弃用,并且在后续版本中被移除。为了解决这个问题,我们可以使用 concat 函数来代替 append

ChatGPT生成的源代码:

import os

import time

import random

import pandas as pd

from selenium import webdriver

from selenium.webdriver.chrome.service import Service

from selenium.webdriver.common.by import By

from selenium.webdriver.chrome.options import Options

# 设置chromedriver的路径

chrome_service = Service("D:\\Program Files\\chromedriver125\\chromedriver.exe")

# 设置请求头

chrome_options = Options()

chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36")

# 启动浏览器

driver = webdriver.Chrome(service=chrome_service, options=chrome_options)

# 设置网页编码

driver.get("https://www.douyin.com/search/ChatGPT?type=video")

time.sleep(50)

# 打印源代码

print(driver.page_source)

# 滚动网页到底部以加载更多内容

last_height = driver.execute_script("return document.body.scrollHeight")

while True:

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

time.sleep(random.randint(1, 5))

new_height = driver.execute_script("return document.body.scrollHeight")

if new_height == last_height:

break

last_height = new_height

# 创建一个空的DataFrame

df = pd.DataFrame(columns=['视频标题', '视频博主', '视频发布时间', '视频链接'])

# 定位包含视频信息的li标签

video_elements = driver.find_elements(By.CLASS_NAME, "HN50D2ec.Z3LKqldT")

print(f"找到 {len(video_elements)} 个视频元素")

# 遍历每个视频元素提取信息

for i in range(len(video_elements)):

# 随机暂停5-10秒

time.sleep(random.randint(5, 10))

# 提取视频标题

try:

title = driver.find_element(By.CSS_SELECTOR, f"#search-content-area > div > div.aS8_s2bj > div.fSYtCCtg > div:nth-child(2) > ul > li:nth-child({i+1}) > div > a > div > div.d2yYYhwo > div > div.ILGAlGLX").text

except:

title = ''

# 提取视频博主

try:

author = driver.find_element(By.CSS_SELECTOR, f"#search-content-area > div > div.aS8_s2bj > div.fSYtCCtg > div:nth-child(2) > ul > li:nth-child({i+1}) > div > a > div > div.d2yYYhwo > div > div.oBbvFsS9 > span.ehgTdQCP > span.k7fHrf54").text

except:

author = ''

# 提取视频发布时间

try:

publish_time = driver.find_element(By.CSS_SELECTOR, f"#search-content-area > div > div.aS8_s2bj > div.fSYtCCtg > div:nth-child(2) > ul > li:nth-child({i+1}) > div > a > div > div.d2yYYhwo > div > div.oBbvFsS9 > span.H_OXalNs").text

except:

publish_time = ''

# 提取视频链接

try:

video_link = driver.find_element(By.CSS_SELECTOR, f"#search-content-area > div > div.aS8_s2bj > div.fSYtCCtg > div:nth-child(2) > ul > li:nth-child({i+1}) > div > a").get_attribute("href")

except:

video_link = ''

# 打印提取的信息

print(f"视频标题: {title}")

print(f"视频博主: {author}")

print(f"视频发布时间: {publish_time}")

print(f"视频链接: {video_link}")

# 将信息添加到DataFrame

df = pd.concat([df, pd.DataFrame({'视频标题': [title], '视频博主': [author], '视频发布时间': [publish_time], '视频链接': [video_link]})], ignore_index=True)

# 创建Excel文件路径

excel_path = "F:\\aivideo\\douyinchatgpt.xlsx"

os.makedirs(os.path.dirname(excel_path), exist_ok=True)

# 将DataFrame保存到Excel文件

df.to_excel(excel_path, index=False)

# 关闭浏览器

driver.quit()

print(f"数据已保存到 {excel_path}")

程序运行结果如上。

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

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

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

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

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