遇到的问题
我遇到的情况可能比较特殊,我的需求是爬取Video下src属性的MP4链接
我通过抓包工具,复制到了Xpath的路径后爬取,但返回的结果却是空列表
/html/body/div[2]/div[1]/div[1]/div[1]/div[1]/div/video
起初我以为是路径问题,但是当我把/video去掉后却能正常爬取
问题分析
返回为空的原因可能是以下几种可能性之一:
-
XPath路径错误。
-
动态加载内容:有些网页使用JavaScript来动态加载内容,XPath可能无法直接捕捉到动态加载的元素。如果视频是通过JavaScript添加到页面上的,可能需要使用Selenium或其他工具来模拟浏览器行为,并等待视频加载完成后再查找它。
-
视频标签不存在。
解决方法
要解决动态加载内容的问题,可以尝试使用Selenium或其他工具来模拟浏览器行为。Selenium是一个自动化测试工具,可以模拟用户在浏览器中的行为,包括加载页面、点击元素和执行JavaScript代码等操作。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
url = r'https://www.pearvideo.com/video_1785718'
headers = {
# 通常情况下,使用Selenium的时候不需要设置headers来伪装浏览器,
# 因为它本身就会模拟真实的浏览器行为,包括发送请求时的User-Agent头部信息。
}
# 创建一个浏览器实例
driver = webdriver.Chrome()
# 打开网页
driver.get(url)
# 等待视频加载完成
wait = WebDriverWait(driver, 10) # 最多等待10秒,时间短的话,可能会因为没有加载出数据而报错
path = r'/html/body/div[2]/div[1]/div[1]/div[1]/div[1]/div/video'
video_element = wait.until(EC.visibility_of_element_located((By.XPATH, path)))
# 提取视频链接
video_src = video_element.get_attribute('src')
print(video_src)
结果
成功爬取