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))

代码解读:

  1. 导入必要的库: 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库的VideoFileClipAudioFileClip类读取视频和音频文件,并将它们合并成一个新的视频文件。

注意事项:

  • 在实际操作中,需要根据网站的具体情况修改代码。* 爬取数据时需要注意网站的robots协议,遵守规则,避免对网站造成负担。* 本文仅供学习交流,请勿用于非法用途。
Python爬虫实战:用requests和BeautifulSoup抓取豆瓣电影信息

原文地址: https://www.cveoy.top/t/topic/fQ2U 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录