Python—Scrapy实践项目
- 人工智能
- 2025-08-17 15:18:01

爬取豆瓣电影2022年Top250部经典电影 1.项目概述
从 movie.douban/top250爬取电影的标题、评分、主题。我在之前使用普通的爬虫实现了类似的功能,可以对比来进行学习(Python爬虫——爬虫基础模块和类库(附实践项目))
2.实现步骤1.将response对象包装成一个Selector对象
sel = Selector(response)2.在网页(第几页无所谓)打开‘检查’,找到我们需要爬取的区域,复制selector,用于css解析。(对应生成list_items)
#content > div > div.article > ol > li # 获取后需要把li后面的nth-child()去掉,这样我们就获取到所有包含在li中的信息。上面是去掉nth-child后的代码3.在爬虫中将指定爬取的区域写成css选择器,并返回文本信息
list_item.css('span.title::text').extract_first() #意义为选择在span标签下为title属性的text类型数据 #由于css选择器返回的对象仍然为css选择器对象,需要使用extract_first使其以字符串类型返回 #选择使用extract_first是为了只获取电影的中文标题 #其他的css选择器与之类似4.将爬虫爬取到的数据组装成为Item对象——>在items.py中编写MovieItem类,并在爬虫中实例化。将实例化的对象以生成器的形式返回。
5.分析页面的导航栏,可知每个页面的起始电影等于(页面-1)*25。使用for循环就可以爬取后续的页面
for page in range(10): yield Request(url=f' movie.douban /top250?start={page * 25}') # 生成器返回的对象为Request对象6.运行爬虫,并将数据写入csv文件中
scrapy crawl douban -o douban.csv7.将数据写入execl文件:在管道pipelines中写初始化函数(__init__)创建的表 和关闭爬虫时保存execl文件的操作 (关闭爬虫是自动的过程,不要过于纠结,写保存的文件的代码就行了)
3.代码实现(不包含创建项目的过程)爬虫部分(douban.py)
import scrapy from scrapy import Selector, Request from scrapy.http import HtmlResponse from spider2107.items import MovieItem class DoubanSpider(scrapy.Spider): name = "douban" allowed_domains = ["movie.douban "] def start_requests(self): for page in range(10): yield Request(url=f' movie.douban /top250?start={page * 25}') def parse(self, response: HtmlResponse, **kwargs): sel = Selector(response) list_items = sel.css('#content > div > div.article > ol > li') for list_item in list_items: movie_item = MovieItem() movie_item['title'] = list_item.css('span.title::text').extract_first() movie_item['rank'] = list_item.css('span.rating_num::text').extract_first() movie_item['subject'] = list_item.css('span.inq::text').extract_first() yield movie_itemitem对象(items.py)
import scrapy class MovieItem(scrapy.Item): title = scrapy.Field() rank = scrapy.Field() subject = scrapy.Field()设置请求头(settings.py)找到对应的位置取消注释并修改即可
USER_AGENT = ("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 " "Safari/537.36 Edg/117.0.2045.47")导入写入execl表时需要的库
pip install openpyxl管道文件(pipelines.py)
import openpyxl class Spider2107Pipeline: def __init__(self): self.wb = openpyxl.Workbook() self.ws = self.wb.active self.ws.title = "top250" self.ws.append(('标题', '评分', '主题')) def close_spider(self, spider): self.wb.save('电影数据.xlsx') def process_item(self, item, spider): title = item.get('title', '') rank = item.get('rank', '') subject = item.get('subject', '') self.ws.append((title, rank, subject)) return item配置管道(settings.py)找到对应的位置取消注释并修改即可
ITEM_PIPELINES = { "spider2107.pipelines.Spider2107Pipeline": 300, } 4.结果展示挖取数据
放入execl
Python—Scrapy实践项目由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Python—Scrapy实践项目”
上一篇
二叉搜索树的基础操作