Python爬虫实战:用requests和BeautifulSoup抓取豆瓣电影信息
Python爬虫实战:用requests和BeautifulSoup抓取豆瓣电影信息
本文将介绍如何使用Python的requests和BeautifulSoup库爬取豆瓣电影排行榜,提取电影名称、评分、下载链接等信息,并最终实现视频和音频的合并。
**代码实现:**pythonimport requestsimport osimport jsonfrom moviepy.editor import VideoFileClip, AudioFileClip
from bs4 import BeautifulSoup
if name=='main': url = 'https://movie.douban.com/j/chart/top_list' param = { 'type' : '24', 'interval_id' : '100 % 3A90', 'action' :'', 'start' : '0', # 从库中的第几部去取 'limit' : '10', # 一次性取出的部数 }
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36 Edg/99.0.1150.55' } response = requests.get(url=url,params=param,headers=headers)
list_data = response.json()
for movie in list_data: title = movie['title'] rating = movie['rating'] print('电影名称:{}'.format(title)) print('评分:{}'.format(rating)) # 向这个地址发送请求,得到响应对象 res = requests.get(movie['url'], headers=headers) # 使用 bs4 将页面源码进行解析 soup = BeautifulSoup(res.text, 'html.parser') # 定位页面的标题,当成文件保存名称 title = soup.h1.string # 我们需要的数据在script的标签内,但是没有属性不能过滤 script_all = soup.find_all('script') for script in script_all: content = script.text # 提取script的文本内容 # 包含判断 if 'window.__playinfo__=' in content: # 剔除 window.__playinfo__= 这些内容,剩余的内容就是需要转化的数据 content_res = content[20:] # 通过json的方法 将类似于字典的字符串数据转化成字典类型 data = json.loads(content_res) # 提取视频链接 video_url = data['data']['dash']['video'][0]['baseUrl'] headers['referer'] = url # 请求这个视频链接 video_res = requests.get(video_url, headers=headers) with open('{}.mp4'.format(title), 'wb') as v_file: v_file.write(video_res.content) print('视频文件名:{}.mp4'.format(title)) # 提取音频链接 audio_url = data['data']['dash']['audio'][0]['baseUrl'] print('音频文件名:{}.mp3'.format(title)) # 请求访问音频链接 audio_res = requests.get(audio_url, headers=headers) # 保存音频文件 with open('{}.mp3'.format(title), 'wb') as a_file: a_file.write(audio_res.content)
# 创建视频编辑对象 video_clip = VideoFileClip('{}.mp4'.format(title)) # 创建音频编辑对象 audio_clip = AudioFileClip('{}.mp3'.format(title)) # 视频 需要设置音频 merge_result = video_clip.set_audio(audio_clip) # 保存到视频文件 merge_result.write_videofile('merge-{}.mp4'.format(title))
代码解读:
- 导入必要的库:
requests,os,json,moviepy.editor,bs4。2. 设置目标网址和请求参数: 包括电影类型、排序方式、起始位置、获取数量等。3. 设置请求头: 模拟浏览器访问,避免被反爬虫机制拦截。4. 发送请求并获取数据: 使用requests.get()方法发送GET请求,并将返回结果解析为JSON格式。5. 遍历电影列表: 提取每部电影的标题、评分、详情页链接等信息。6. 访问详情页面: 使用requests.get()方法访问每部电影的详情页面。7. 解析页面内容: 使用BeautifulSoup库解析HTML页面,定位到包含视频和音频链接的script标签。8. 提取视频和音频链接: 从script标签中提取JavaScript代码,使用正则表达式或字符串处理方法提取视频和音频链接。9. 下载视频和音频文件: 使用requests.get()方法下载视频和音频文件,并保存到本地。10. 合并视频和音频: 使用moviepy库的VideoFileClip和AudioFileClip类读取视频和音频文件,并将它们合并成一个新的视频文件。
注意事项:
- 在实际操作中,需要根据网站的具体情况修改代码。* 爬取数据时需要注意网站的robots协议,遵守规则,避免对网站造成负担。* 本文仅供学习交流,请勿用于非法用途。
原文地址: https://www.cveoy.top/t/topic/fQ2U 著作权归作者所有。请勿转载和采集!