学习Scrapy框架-----豆瓣电影排行榜

1、Xpath测试工具

https://www.toolnb.com/tools/xpath.html

2、项目介绍

利用scrapy爬虫框架实现爬起电影榜top250相关信息并用openpyxl存储于excel中
在这里插入图片描述

3、制作过程## 3.1、安装scrapy

pip install scrapy

3.2、创建项目

进入scrapys\spiders文件夹

scrapy startproject scrapys

3.3、创建爬虫

scrapy genspider douban douban.com

3.4、爬虫配置

  • settings.py

    由于大部分网站都进行了反爬虫措施,需要在爬虫文件中设置DEFAULT_REQUEST_HEADERS

    • DEFAULT_REQUEST_HEADERS处添加如下信息
    DEFAULT_REQUEST_HEADERS = {
      'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
      'Accept-Language': 'en',
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 "
                          "Safari/537.36 SE 2.X MetaSr 1.0"
    }
    
    • 配置启用管道
    ITEM_PIPELINES = {
       'scrapys.pipelines.DoubanPipeline': 300,
    }
    
  • item.py

    • 定义爬取字段
    class DoubanItem(scrapy.Item):
        num = scrapy.Field()   # 排名
        title = scrapy.Field()  # 电影名字
        star = scrapy.Field()  # 评分
        text = scrapy.Field()  # 介绍
        pass
    

3.5、编写爬虫

  • douban.py文件编写爬虫代码

    import scrapy
    
    
    class DoubanSpider(scrapy.Spider):
        name = 'douban'
        allowed_domains = ['douban.com']
        start_urls = ['https://movie.douban.com/top250']
    
        def parse(self, response):
            node_data: []
            # 获取电影div节点
            node_list = response.xpath('//*[@id="content"]/div/div[1]/ol/li')
            # print(len(node_list))
            # 遍历div节点
            for item in node_list:
                temp = {'num': item.xpath('./div/div[1]/em/text()').extract_first(),
                        'title': item.xpath('./div/div[2]/div[1]/a/span[1]/text()').extract_first(),
                        'star': item.xpath('./div/div[2]/div[2]/div/span/text()').extract_first(),
                        'text': item.xpath('./div/div[2]/div[2]/p[2]/span/text()').extract_first(),
    
                        }
    
                # print(item)
    
                yield temp
    
            # 翻页:下一页’href信息 拼接到原网址
            next_url = response.xpath('//*[@id="content"]/div/div[1]/div[2]/span[3]/a/@href').extract_first()
            # 判断有没有下一页
            if next_url is not None:
                # print(next_url)
                next_url = "https://movie.douban.com/top250" + next_url
                yield scrapy.Request(next_url, self.parse)
    

3.6、数据存储

  • pipelines.py中定义对数据的操作

    from openpyxl import Workbook
    
    
    class DoubanPipeline:
    
        def __init__(self):
            self.wb = Workbook()  # 创建Excel工作簿
            self.ws = self.wb.create_sheet("豆瓣电影Top250", 0)  # 创建表单并放在最前面
            self.ws.append(["豆瓣电影Top250"])  # 标题
            self.ws.append(["排名", "电影名称", "评分", "一句话介绍"])  # 表头
            # self.ws.append([item['num'], item['title'], item['text']])
    
        def process_item(self, item, spider):
            # 测试输出
            print(item['num']+'    '+item['title']+'\t'+item['star']+'\t'+item['text'])
            # 添加数据
            self.ws.append([item['num'], item['title'], item['star'], item['text']])
    
            return item
    
        def __del__(self):
            self.wb.save('top250.xlsx')  # 保存excel
    

3.7、运行爬虫

scrapy crawl douban

无日志运行scrapy crawl douban --nolog

4、项目源码

源码 密码: kba6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值