腾讯视频 Python 爬虫项目实战 !

做了一些小项目,用的技术和技巧会比较散比较杂,写一个小品文记录一下,帮助熟悉。

需求:经常在腾讯视频上看电影,在影片库里有一个"豆瓣好评"板块。我一般会在这个条目下面挑电影。但是电影很多,又缺乏索引,只能不停地往下来,让js加载更多的条目。然而前面的看完了,每次找新的片就要拉很久。所以用爬虫将"豆瓣好评"里的电影都爬下来整理到一个表中,方便选片。

项目地址:https://github.com/yangrq1018/vqq-douban-film

依赖

Python资源共享群:626017123

需要如下Python包:

  • requests
  • bs4 - Beautiful soup
  • pandas

就这些,不需要复杂的自动化爬虫架构,简单而且常用的包就够了。

爬取影片信息

首先观察电影频道,发现是异步加载的。可以用Firefox(Chrome也行)的inspect中的network这个tab来筛选查看可能的api接口。很快发现接口的URL是这个格式的:

base_url = 'https://v.qq.com/x/bu/pagesheet/list?_all=1&append=1&channel=movie&listpage=2&offset={offset}&pagesize={page_size}&sort={sort}'

其中 offset是请求页开始的位置, pagesize是每页请求的数量, sort是类型。在这里 sort=21指我们需要的"豆瓣好评"类型。pagesize不能大于30,大于30也只会返回三十个元素,低于30会返回指定数量的元素。

# 让Pandas完整到处过长的URL,后面会需要
pd.set_option('display.max_colwidth', -1)
base_url = 'https://v.qq.com/x/bu/pagesheet/list?_all=1&append=1&channel=movie&listpage=2&offset={offset}&pagesize={page_size}&sort={sort}'
# 豆瓣最佳类型
DOUBAN_BEST_SORT = 21
NUM_PAGE_DOUBAN = 167

写一个小小的循环就可以发现,豆瓣好评这个类型总共有167页,每页三十个元素。

我们使用 requests这个库来请求网页, get_soup会请求第 page_idx页的元素,用 Beautifulsoup来解析 response.content,生成一个类似 DOM,可以很方便地查找我们需要的element的对象。我们返回一个 list。每个电影条目是包含在一个叫list_i

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python爬虫项目是指使用Python编写的程序,通过网络爬取数据并进行处理的项目。以下是一个Python爬虫项目的实战步骤,并且附带源码: 1.确定爬取目标:确定需要爬取的网站和数据类型。 2.分析网站结构:分析网站的结构和数据获取方式,确定需要使用的爬虫框架和库。 3.编写爬虫程序:根据分析结果,编写Python爬虫程序,包括主要脚本、模块和配置文件。 4.数据存储:确定数据存储格式,例如使用数据库或者文件存储等方式。 5.测试和优化:对爬虫程序进行测试和优化,确保程序的稳定性和效率。 以下是一个简单的Python爬虫项目的源码,用于爬取豆瓣电影Top250的电影名称和评分: ```python import requests from bs4 import BeautifulSoup url = 'https://movie.douban.com/top250' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} movies = [] def get_movies(url): html = requests.get(url, headers=headers).content soup = BeautifulSoup(html, 'html.parser') movie_list = soup.find('ol', attrs={'class': 'grid_view'}) for movie_li in movie_list.find_all('li'): movie_name = movie_li.find('span', attrs={'class': 'title'}).getText() movie_rating = movie_li.find('span', attrs={'class': 'rating_num'}).getText() movies.append({'name': movie_name, 'rating': movie_rating}) get_movies(url) for movie in movies: print(movie['name'], movie['rating']) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值