• Python—Scrapy实践项目


    爬取豆瓣电影2022年Top250部经典电影

    1.项目概述

            从https://movie.douban/top250爬取电影的标题、评分、主题。我在之前使用普通的爬虫实现了类似的功能,可以对比来进行学习(Python爬虫——爬虫基础模块和类库(附实践项目)

    2.实现步骤

    1.将response对象包装成一个Selector对象

    sel = Selector(response)

    2.在网页(第几页无所谓)打开‘检查’,找到我们需要爬取的区域,复制selector,用于css解析。(对应生成list_items)

    1. #content > div > div.article > ol > li
    2. # 获取后需要把li后面的nth-child()去掉,这样我们就获取到所有包含在li中的信息。上面是去掉nth-child后的代码

    3.在爬虫中将指定爬取的区域写成css选择器,并返回文本信息

    1. list_item.css('span.title::text').extract_first()
    2. #意义为选择在span标签下为title属性的text类型数据
    3. #由于css选择器返回的对象仍然为css选择器对象,需要使用extract_first使其以字符串类型返回
    4. #选择使用extract_first是为了只获取电影的中文标题
    5. #其他的css选择器与之类似

    4.将爬虫爬取到的数据组装成为Item对象——>在items.py中编写MovieItem类,并在爬虫中实例化。将实例化的对象以生成器的形式返回。

    5.分析页面的导航栏,可知每个页面的起始电影等于(页面-1)*25。使用for循环就可以爬取后续的页面

    1. for page in range(10):
    2. yield Request(url=f'https://movie.douban.com/top250?start={page * 25}')
    3. # 生成器返回的对象为Request对象

    6.运行爬虫,并将数据写入csv文件中

    scrapy crawl douban -o douban.csv

    7.将数据写入execl文件:在管道pipelines中写初始化函数(__init__)创建的表 和关闭爬虫时保存execl文件的操作 (关闭爬虫是自动的过程,不要过于纠结,写保存的文件的代码就行了) 

    3.代码实现(不包含创建项目的过程)

    爬虫部分(douban.py)

    1. import scrapy
    2. from scrapy import Selector, Request
    3. from scrapy.http import HtmlResponse
    4. from spider2107.items import MovieItem
    5. class DoubanSpider(scrapy.Spider):
    6. name = "douban"
    7. allowed_domains = ["movie.douban.com"]
    8. def start_requests(self):
    9. for page in range(10):
    10. yield Request(url=f'https://movie.douban.com/top250?start={page * 25}')
    11. def parse(self, response: HtmlResponse, **kwargs):
    12. sel = Selector(response)
    13. list_items = sel.css('#content > div > div.article > ol > li')
    14. for list_item in list_items:
    15. movie_item = MovieItem()
    16. movie_item['title'] = list_item.css('span.title::text').extract_first()
    17. movie_item['rank'] = list_item.css('span.rating_num::text').extract_first()
    18. movie_item['subject'] = list_item.css('span.inq::text').extract_first()
    19. yield movie_item

    item对象(items.py)

    1. import scrapy
    2. class MovieItem(scrapy.Item):
    3. title = scrapy.Field()
    4. rank = scrapy.Field()
    5. subject = scrapy.Field()

    设置请求头(settings.py)找到对应的位置取消注释并修改即可

    1. USER_AGENT = ("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 "
    2. "Safari/537.36 Edg/117.0.2045.47")

    导入写入execl表时需要的库

    pip install openpyxl

    管道文件(pipelines.py)

    1. import openpyxl
    2. class Spider2107Pipeline:
    3. def __init__(self):
    4. self.wb = openpyxl.Workbook()
    5. self.ws = self.wb.active
    6. self.ws.title = "top250"
    7. self.ws.append(('标题', '评分', '主题'))
    8. def close_spider(self, spider):
    9. self.wb.save('电影数据.xlsx')
    10. def process_item(self, item, spider):
    11. title = item.get('title', '')
    12. rank = item.get('rank', '')
    13. subject = item.get('subject', '')
    14. self.ws.append((title, rank, subject))
    15. return item

    配置管道(settings.py)找到对应的位置取消注释并修改即可

    1. ITEM_PIPELINES = {
    2. "spider2107.pipelines.Spider2107Pipeline": 300,
    3. }

    4.结果展示

    挖取数据

     

     放入execl

  • 相关阅读:
    乐观锁和悲观锁在kubernetes中的应用
    程序内hook键盘
    谈谈电商App的压测
    AI定义汽车,长城画了个看得见的“饼”
    Scala开发环境搭建
    小学生护眼灯怎么选?性价比高的护眼台灯
    c++使用外部函数备忘
    Prototypical Networks for Few-shot Learning
    pandas数据处理之数据转换(映射map、替换replace、重命名rename)
    Python-爬虫(Scrapy爬虫框架,爬取豆瓣读书和评分)
  • 原文地址:https://blog.csdn.net/m0_65995252/article/details/133655882