(内容仅供技术探讨,切勿用于商业用途)

好久没有去电影院看电影了,新上映的电影因为版权原因看不了,老电影又不知道看什么,好难啊。。。不如我们看看榜单上都有啥好电影推荐吧,这次就对某瓣电影下手吧

一、开发环境

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相关推荐

  1. python爬虫 - 起点女生榜单爬取 - 1

    python爬虫 - 起点女生榜单爬取 ​ 最近一直在追庆余年,顺带瞄了一眼小说,真真是精彩(虽然因为范闲多妻的设定接受不了就放弃了). ​ 说来说去,还是钟爱女频的修仙小说,所以就想爬一下起点女生网 ...

  2. Python爬虫实战Pro | (1) 爬取猫眼电影Top100榜单

    在本篇博客中,我们将使用requests+正则表达式来爬取猫眼电影官网的TOP100电影榜单,获取每部电影的序号,片名,主演,上映日期,评分和封面等内容. 之前在Python爬虫实战(1)中我们曾爬取 ...

  3. Python爬虫实战 | (1) 爬取猫眼电影官网的TOP100电影榜单

    在本篇博客中,我们将使用requests+正则表达式来爬取猫眼电影官网的TOP100电影榜单,获取每部电影的片名,主演,上映日期,评分和封面等内容. 打开猫眼Top100,分析URL的变化:发现Top ...

  4. 【python爬虫自学笔记】(实战)----爬取猫眼电影榜单Top100

    目的:爬取猫眼电影榜单TOP100的信息并保存在文档中. 查看网站结构,确定思路: 首先请求网页的地址为maoyan.com/board/4,电影信息的内容包含在一个个dd标签之中,分析dd标签中的内 ...

  5. 《崔庆才Python3网络爬虫开发实战教程》学习笔记(3):抓取猫眼电影榜单TOP100电影,并存入Excel表格

    本篇博文是自己在学习崔庆才的<Python3网络爬虫开发实战教程>的学习笔记系列,如果你也要这套视频教程的话,关注我公众号[小众技术],关注后回复[PYTHON],无套路免费送你一个学习大 ...

  6. python爬虫实战—豆瓣电影TOP250

    系列文章目录 python爬虫实战 前言 本文主要用python爬取豆瓣电影TOP250数据并将爬取到的数据保存到MySQL中.同时也介绍了该项目中遇到的问题. 爬取内容:电影名称,电影别名,导演,主 ...

  7. Python爬虫实战 | (3) 爬取豆瓣电影Top250

    在本篇博客中,我们将使用requests+正则表达式来爬取豆瓣电影TOP250电影榜单,获取每部电影的序号.片名.导演.编剧.主演.类型.制作国家/地区.语言.上映日期.片长.又名.豆瓣评分和剧情简介 ...

  8. 【Python爬虫】猫眼电影榜单Top100

    这是一个入门级的Python爬虫,结构易于理解.本文对编写此爬虫的全过程进行了讲述.希望对大家的Python爬虫学习有所帮助. 一.目标 爬取猫眼电影榜单Top100,将数据存入Excel文件中,并利 ...

  9. Python全栈开发-Python爬虫-05 爬取猫眼电影榜单信息

    爬取猫眼电影榜单信息(翻页) 一. 获取url及headers 首先进入猫眼电影首页: 猫眼电影 之后点击菜单栏的 榜单 并在下面选择 TOP100榜 接着右击检查并刷新界面,在Network中找到4 ...

最新文章

  1. InfoQ播客: Shuman Ghosemajumder谈安全和网络犯罪
  2. python使用matplotlib可视化堆积的折线图、使用stackplot函数可视化堆积的折线图、不同数据在垂直方向堆叠
  3. Kubernetes的十大使用技巧
  4. vfprintf php,PHP vfprintf() 函数
  5. Rplidar学习(五)—— rplidar使用cartographer_ros进行地图云生成
  6. 绝不能放进微波炉的10样东西,最后一个太意外
  7. 使有用计算机不注意卫生,保护眼睛注意细节有哪些
  8. AcWing 898. 数字三角形
  9. C++ 沉思录——Chap4:设计类的核查表
  10. GHOSTXP_SP3
  11. Header First设计模式学习笔记——单例模式
  12. (box-shadow)阴影 -CSS3 注:外阴影
  13. Python实现google翻译
  14. Gallery 简易图片浏览
  15. [经验教程]拼多多直接免拼是什么意思?
  16. hive 创建外部表
  17. Git生成公钥、私钥以及ssh key配置
  18. windows网站操作系统管理【1】
  19. 从云大会谈谈云计算“关键”技术趋势
  20. spring实战学习(四)AOP及其实现方式

热门文章

  1. 阿里云服务器安装WordPress,搭建自己的博客网站
  2. 通达OA应用中心操作手册
  3. matlab对AMD显卡的支持,matlab - 深入学习Matlab与AMD显卡 - 堆栈内存溢出
  4. 光电耦合器型号(FOD3120,TLP350,TLP250)介绍应用实例精讲
  5. 云计算原来是IT界工资最高的
  6. RISC-V_GD32VF103-对 Debug 设置
  7. SOLID之单一职责原则:简约而不简单
  8. Windows WiFi 热点共享 debug Android
  9. 如何根据实际需求选择合适的三维实景建模方式?
  10. 【信息论基础】离散信息的度量—自信息和互信息