Python爬取爱奇艺非VIP视频实战:URL解析与数据抓取
本文详解如何利用Python爬取爱奇艺非VIP视频。通过构造搜索URL并分析分页规律,使用requests获取页面源码,结合BS4库解析HTML标签提取视频链接、标题及描述信息。针对作者信息位置不固定的问题,采用try-except机制进行容错处理,确保数据抓取的完整性与稳定性。
爱奇艺非VIP视频爬取背景与目标
当前主流视频平台如爱奇艺,通常要求用户下载专用客户端才能观看或下载视频。本文将探讨一种无需安装客户端即可直接获取非VIP视频资源的技术方案。
首先,明确需要爬取的目标内容范围。
环境配置与URL规律分析
确保开发环境已正确安装所需程序及运行库,完成基础配置。
以下代码展示了在爱奇艺搜索特定“英文名”关键词后的处理流程。搜索结果共20页,我们从第一页开始,对网页进行解析并深入分析其结构。
通过逐一分析每一页的网址构成,发现其链接存在固定规律,利用这一规律可以直接拼接生成所有页面的访问地址。
接着,针对每个视频详情页的URL,利用HTML标签特征(如class、div、href等属性),借助bs4库执行具体的数据爬取操作。
对于其他附加信息,则通过遍历已获取的URL列表,在每个页面中再次利用标签定位来提取所需数据。
核心代码实现:URL与基础信息抓取
import requests
import pandas as pd
from bs4 import BeautifulSoup
#爬取URL
headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'}
b=[]
for i in range(1,2):
url="https://so.iqiyi.com/so/q_英文名_ctg_t_0_page_"+str(i)+"_p_1_qc_0_rd__site__m_1_bitrate_" #共20页,根据每页的网址变换规律进行拼接
r=requests.get(url,headers=headers)
soup=BeautifulSoup(r.text,"html.parser")
a=soup.findAll('a',{'class':'main-tit'})
for i in a:
if 'http://www.'in i.get('href')and 'html'in i.get('href'):
b.append(i.get('href'))
print(b)
#爬取标题
e=[]
for k in b:
res=requests.get(k,headers=headers)
Soup=BeautifulSoup(res.text,'html.parser')
c=Soup.findAll('div',{'class':'feed-title-box'})
for d in c:
e.append(d.find('h1').text)
print(e)
#爬取标题下方描述
f=[]
for j in b:
res=requests.get(j,headers=headers)
Soup=BeautifulSoup(res.text,'html.parser')
c=Soup.findAll('div',{'class':'qy-play-intro-feed'})
for d in c:
f.append(d.find('p',{'class':"intro-iterm__block"}).text)
print(f)
#爬取发布时间
h=[]
for j in b:
res=requests.get(j,headers=headers)
Soup=BeautifulSoup(res.text,'html.parser')
c=Soup.findAll('div',{'class':'intro-iterm'})
for d in c:
ff=(d.find('span',{'class':"intro-iterm__txt"}))
if ff==None:
continue
h.append(ff.text)
print(h)
# 爬取上传作者
m=[]
for k in b:
res=requests.get(k,headers=headers)
Soup=BeautifulSoup(res.text,'html.parser')
c=Soup.find('div',{'id':'block-P'})
d=Soup.find('div',{'class':'qy-player-maker'})
try:
name=c.get(':uploader').split(',')[1].split(':')[1].replace('"','')#输出是字符串的格式,所以用split切割。replace替换
except:
try:
name=d.get(':uploader').split(',')[1].split(':')[1].replace('"','')
except:
m.append("匿名用户")
m.append(name)
print(m)
上述代码执行后的输出结果,包含了该“英文名”相关的所有视频网址及其附带的基本信息。
异常处理:作者信息的多位置容错解析
需要特别说明的是,在爬取视频作者信息的模块中,我使用了try-except异常处理机制。这是因为在爬取过程中发现,视频上传者的显示位置并不固定:有的位于视频左下方,有的位于右下方,甚至部分视频根本没有显示上传作者信息。
方法扩展与总结
同理,若需爬取其他类型的内容,也可采用类似的URL获取与标签解析方法来提取相关信息。
以上就是本文的全部内容,希望能为各位的学习提供有益参考,也欢迎大家继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









