腾讯视频 Python 爬虫实操,看完你学会了吗?

【腾讯视频 Python 爬虫实操,看完你学会了吗?】做了一些小项目 , 用的技术和技巧会比较散比较杂 , 写一个小品文记录一下 , 帮助熟悉 。
需求:经常在腾讯视频上看电影 , 在影片库里有一个"豆瓣好评"板块 。我一般会在这个条目下面挑电影 。但是电影很多 , 又缺乏索引 , 只能不停地往下来 , 让js加载更多的条目 。然而前面的看完了 , 每次找新的片就要拉很久 。所以用爬虫将"豆瓣好评"里的电影都爬下来整理到一个表中 , 方便选片 。

腾讯视频 Python 爬虫实操,看完你学会了吗?

文章插图
 
项目地址:https://github.com/yangrq1018/vqq-douban-film
1依赖需要如下Python包:
  • requests
  • bs4 - Beautiful soup
  • pandas
就这些 , 不需要复杂的自动化爬虫架构 , 简单而且常用的包就够了 。
2爬取影片信息首先观察电影频道 , 发现是异步加载的 。可以用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 = 21NUM_PAGE_DOUBAN = 167写一个小小的循环就可以发现 , 豆瓣好评这个类型总共有167页 , 每页三十个元素 。
我们使用 requests这个库来请求网页 ,  get_soup会请求第 page_idx页的元素 , 用 Beautifulsoup来解析 response.content , 生成一个类似 DOM , 可以很方便地查找我们需要的element的对象 。我们返回一个 list 。每个电影条目是包含在一个叫list_item的 div里的 , 所以写一个函数来帮助我们提取所有的这样的 div 。
def get_soup(page_idx, page_size=30, sort=DOUBAN_BEST_SORT): url = base_url.format(offset=page_idx * page_size, page_size=page_size, sort=sort) res = requests.get(url) soup = bs4.BeautifulSoup(res.content.decode('utf-8'), 'lxml') return soupdef find_list_items(soup): return soup.find_all('div', class_='list_item')我们遍历每一页 , 返回一个含有所有的被 bs4过的条目元素的html的 list 。
def douban_films(): rel = [] for p in range(NUM_PAGE_DOUBAN): print('Getting page {}'.format(p)) soup = get_soup(p) rel += find_list_items(soup) return rel这是其中的一部电影的HTML代码:
<div __wind="" class="list_item"><a class="figure" data-float="j3czmhisqin799r" href=https://www.isolves.com/it/cxkf/yy/Python/2019-09-27/"https://v.qq.com/x/cover/j3czmhisqin799r.html" tabindex="-1" target="_blank" title="霸王别姬">腾讯视频 Python 爬虫实操,看完你学会了吗?腾讯视频 Python 爬虫实操,看完你学会了吗?
9.6
霸王别姬
主演:张国荣 张丰毅 巩俐 葛优
4671万
不难发现 , 霸王别姬这部电影 , 名称、播放地址、封面、评分、主演 , 是否需要会员和播放量都在这个 div中 。在ipython这样的interactive环境中 , 可以方便地找出怎么用bs来提取他们的方法 。我试用的一个技巧是 , 可以打开一个 spyder.py文件 , 在里面编写需要的函数 , 将ipython的自动重载模组的选项打开 , 然后就可以在console里debug之后将代码复制到文件里 , 然后ipython中的函数也会相应的更新 。这样的好处是会比在ipython中改动代码方便许多 。具体如何打开ipython的自动重载:


推荐阅读