Python爬虫实战 - 电影榜单Top250
(内容仅供技术探讨,切勿用于商业用途)
好久没有去电影院看电影了,新上映的电影因为版权原因看不了,老电影又不知道看什么,好难啊。。。不如我们看看榜单上都有啥好电影推荐吧,这次就对某瓣电影下手吧
一、开发环境
IDE:Pycharm
Python 3.7 (三方库:requests、lxml)
二、网站分析调研
1、目标网站
aHR0cHM6Ly9tb3ZpZS5kb3ViYW4uY29tL3RvcDI1MD9zdGFydD0wJmZpbHRlcj0=
2、分析流程
通过查看不同页面,不难发现,每一页的链接,只有一个start参数再变,并且值始终是25的倍数。也就是说,这的参数代表的是电影索引的起始值。
分析后我们不难得出结论,此电影列表,每页25条数据,start从0开始,共计10页,start每页递增25;并且每部电影的数据都在class属性为info的div标签中。
至此,我们需要的所有链接及所需提取数据的位置都已确定,接下来遍可以开始开发我们的程序了。
三、程序开发
1、生成全部链接
本次提取的数据,一共10页,根据起始索引值进行翻页操作。代码如下
def generate_url():"""链接生成器"""for i in range(25):url = f"https://movie.douban.com/top250?start={25*i}&filter="yield url
2、请求并解析数据
def process_page(url):"""获取并解析指定页面信息"""headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54"}response = requests.get(url, headers=headers)response.encoding = "UTF-8"html = etree.HTML(response.text)results = []movieList = html.xpath('//div[@class="info"]')for ch in movieList:item = dict()# 标题item['title'] = ch.xpath('div[@class="hd"]/a/span[@class="title"]/text()')[0]# 副标题item['otherTitle'] = ch.xpath('div[@class="hd"]/a/span[@class="other"]/text()')[0].strip("/\xa0")# urlitem['url'] = ch.xpath('div[@class="hd"]/a/@href')[0] # url# 评分item['star'] = ch.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()')[0]# 引言(名句)item['quote'] = ch.xpath('div[@class="bd"]/p[@class="quote"]/span/text()')[0] if ch.xpath('div[@class="bd"]/p[@class="quote"]/span/text()') else ""results.append(item)print(item)return results
3、保存数据至CSV
需要注意的一点是,我们保存数据是多次保存,所以只需要在第一次保存是写入表头,之后保存则无需再此写入表头
def save_results(results):"""保存数据"""if not os.path.exists('douban.csv'):with open('douban.csv', 'a+', encoding='utf-8', newline='') as f:writer = csv.DictWriter(f, fieldnames=['title', 'otherTitle', 'star', 'quote', 'url'])writer.writeheader() # 写入表头for ch in results:writer.writerow(ch)else:with open('douban.csv', 'a+', encoding='utf-8', newline='') as f:writer = csv.DictWriter(f, fieldnames=['title', 'otherTitle', 'star', 'quote', 'url'])for ch in results:writer.writerow(ch)
四、程序运行
我们将上边的几个方法整合起来,运行下看看效果
import csv
import os
from lxml import etree
import requestsclass DoubanSpider(object):@staticmethoddef generate_url():"""链接生成器"""for i in range(25):url = f"https://movie.douban.com/top250?start={25*i}&filter="yield url@staticmethoddef process_page(url):"""获取并解析指定页面信息"""headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54"}response = requests.get(url, headers=headers)response.encoding = "UTF-8"html = etree.HTML(response.text)results = []movieList = html.xpath('//div[@class="info"]')for ch in movieList:item = dict()# 标题item['title'] = ch.xpath('div[@class="hd"]/a/span[@class="title"]/text()')[0]# 副标题item['otherTitle'] = ch.xpath('div[@class="hd"]/a/span[@class="other"]/text()')[0].strip("/\xa0")# urlitem['url'] = ch.xpath('div[@class="hd"]/a/@href')[0] # url# 评分item['star'] = ch.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()')[0]# 引言(名句)item['quote'] = ch.xpath('div[@class="bd"]/p[@class="quote"]/span/text()')[0] if ch.xpath('div[@class="bd"]/p[@class="quote"]/span/text()') else ""results.append(item)print(item)return results@staticmethoddef save_results(results):"""保存数据"""if not os.path.exists('douban.csv'):with open('douban.csv', 'a+', encoding='utf-8', newline='') as f:writer = csv.DictWriter(f, fieldnames=['title', 'otherTitle', 'star', 'quote', 'url'])writer.writeheader() # 写入表头for ch in results:writer.writerow(ch)else:with open('douban.csv', 'a+', encoding='utf-8', newline='') as f:writer = csv.DictWriter(f, fieldnames=['title', 'otherTitle', 'star', 'quote', 'url'])for ch in results:writer.writerow(ch)def run(self):"""启动"""for url in self.generate_url():results = self.process_page(url)self.save_results(results)if __name__ == '__main__':spider = DoubanSpider()spider.run()
可以看到,运行结果符合我们预期。
还在等什么,还不赶紧动手试试~~
Python爬虫实战 - 电影榜单Top250相关推荐
- python爬虫 - 起点女生榜单爬取 - 1
python爬虫 - 起点女生榜单爬取 最近一直在追庆余年,顺带瞄了一眼小说,真真是精彩(虽然因为范闲多妻的设定接受不了就放弃了). 说来说去,还是钟爱女频的修仙小说,所以就想爬一下起点女生网 ...
- Python爬虫实战Pro | (1) 爬取猫眼电影Top100榜单
在本篇博客中,我们将使用requests+正则表达式来爬取猫眼电影官网的TOP100电影榜单,获取每部电影的序号,片名,主演,上映日期,评分和封面等内容. 之前在Python爬虫实战(1)中我们曾爬取 ...
- Python爬虫实战 | (1) 爬取猫眼电影官网的TOP100电影榜单
在本篇博客中,我们将使用requests+正则表达式来爬取猫眼电影官网的TOP100电影榜单,获取每部电影的片名,主演,上映日期,评分和封面等内容. 打开猫眼Top100,分析URL的变化:发现Top ...
- 【python爬虫自学笔记】(实战)----爬取猫眼电影榜单Top100
目的:爬取猫眼电影榜单TOP100的信息并保存在文档中. 查看网站结构,确定思路: 首先请求网页的地址为maoyan.com/board/4,电影信息的内容包含在一个个dd标签之中,分析dd标签中的内 ...
- 《崔庆才Python3网络爬虫开发实战教程》学习笔记(3):抓取猫眼电影榜单TOP100电影,并存入Excel表格
本篇博文是自己在学习崔庆才的<Python3网络爬虫开发实战教程>的学习笔记系列,如果你也要这套视频教程的话,关注我公众号[小众技术],关注后回复[PYTHON],无套路免费送你一个学习大 ...
- python爬虫实战—豆瓣电影TOP250
系列文章目录 python爬虫实战 前言 本文主要用python爬取豆瓣电影TOP250数据并将爬取到的数据保存到MySQL中.同时也介绍了该项目中遇到的问题. 爬取内容:电影名称,电影别名,导演,主 ...
- Python爬虫实战 | (3) 爬取豆瓣电影Top250
在本篇博客中,我们将使用requests+正则表达式来爬取豆瓣电影TOP250电影榜单,获取每部电影的序号.片名.导演.编剧.主演.类型.制作国家/地区.语言.上映日期.片长.又名.豆瓣评分和剧情简介 ...
- 【Python爬虫】猫眼电影榜单Top100
这是一个入门级的Python爬虫,结构易于理解.本文对编写此爬虫的全过程进行了讲述.希望对大家的Python爬虫学习有所帮助. 一.目标 爬取猫眼电影榜单Top100,将数据存入Excel文件中,并利 ...
- Python全栈开发-Python爬虫-05 爬取猫眼电影榜单信息
爬取猫眼电影榜单信息(翻页) 一. 获取url及headers 首先进入猫眼电影首页: 猫眼电影 之后点击菜单栏的 榜单 并在下面选择 TOP100榜 接着右击检查并刷新界面,在Network中找到4 ...
最新文章
- InfoQ播客: Shuman Ghosemajumder谈安全和网络犯罪
- python使用matplotlib可视化堆积的折线图、使用stackplot函数可视化堆积的折线图、不同数据在垂直方向堆叠
- Kubernetes的十大使用技巧
- vfprintf php,PHP vfprintf() 函数
- Rplidar学习(五)—— rplidar使用cartographer_ros进行地图云生成
- 绝不能放进微波炉的10样东西,最后一个太意外
- 使有用计算机不注意卫生,保护眼睛注意细节有哪些
- AcWing 898. 数字三角形
- C++ 沉思录——Chap4:设计类的核查表
- GHOSTXP_SP3
- Header First设计模式学习笔记——单例模式
- (box-shadow)阴影 -CSS3 注:外阴影
- Python实现google翻译
- Gallery 简易图片浏览
- [经验教程]拼多多直接免拼是什么意思?
- hive 创建外部表
- Git生成公钥、私钥以及ssh key配置
- windows网站操作系统管理【1】
- 从云大会谈谈云计算“关键”技术趋势
- spring实战学习(四)AOP及其实现方式