专栏名称: Dance with GenAI
关于生成式人工智能AIGC的一切
目录
相关文章推荐
吉安发布  ·  明天出分!复试攻略都在这儿了→ ·  昨天  
吉安发布  ·  明天出分!复试攻略都在这儿了→ ·  昨天  
布说天下  ·  衷心建议:长沙学位房只买第一梯队! ·  2 天前  
布说天下  ·  衷心建议:长沙学位房只买第一梯队! ·  2 天前  
唐史主任司马迁  ·  是不是市场要回答这个问题?回答的声音大不大? ... ·  2 天前  
午间明道  ·  徐小明:继续横盘(0220) ·  3 天前  
午间明道  ·  徐小明:继续横盘(0220) ·  3 天前  
51好读  ›  专栏  ›  Dance with GenAI

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

Dance with GenAI  · 公众号  ·  · 2024-05-28 08:29

正文

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

定位到元素位置:

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

href="// http://www. douyin.com/video/734019 7363010637093 "

在ChatGPT中输入提示词:

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

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

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

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

用selenium打开网页: https://www. douyin.com/search/ChatG PT?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/ChatG PT?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







请到「今天看啥」查看全文