• 【scarpy】笔记三:实战一


    一、前提

    我们开始爬虫前,基本按照以下步骤来做:

    1.爬虫步骤:新建项目,明确爬虫目标,制作爬虫,存储爬虫内容

    二、实战(已豆瓣为例子)

    2.1 创建项目

    1.打开pycharm -> 点开terminal (或者命令行都可以)输入 

    scrapy startproject douban
    

    2.导入 douban scrapy项目,项目结构如下

    --spiders 爬虫主文件,爬虫文件在这个里面编写

    --items 数据结构文件,封装提取的文件字段,保存爬取到的数据的容器

    --settings 项目设置文件

    --pipelines 项目中的pipelines文件

    2.2 分析网站

    ->需求:

    1.目标站点:https://movie.douban.com/top250

    2.获取第一页 所有电影对应的编号,电影名称,星级,评论,介绍

    3.获取所有页数的 电影信息

    2.3 步骤

    1.编辑items.py

    数据结构文件,简单的理解成,爬取的数据都存在这里面,要单独定义个字段以字典的形式去存储

    class DoubanItem(scrapy.Item):
        # define the fields for your item here like:
        # name = scrapy.Field()
        #序号
        serial_number = scrapy.Field()
        #电影名称
        movie_name = scrapy.Field()
        #电影介绍
        movie_introduce = scrapy.Field()
        #星级
        movie_start = scrapy.Field()
        #电影评论数
        movie_evaluate = scrapy.Field()
        #电影描述
        movie_describe = scrapy.Field()
    

    2.编辑settings.py,编辑 USER_AGENT

    USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
    

     

    3.在spiders下面新增douban_spider.py

    class DoubanSpiderSpider(scrapy.Spider):
        #爬虫名
        name = 'douban_spider'
        #允许爬虫的域名
        allowed_domains = ['movie.douban.com']
        #入口url,放到调度器里->到引擎->到下载器->返回到scarpy
        start_urls = ['http://movie.douban.com/top250']
        print(response.text)
      def parse(self, response):
      print(response.text)

    4.我们来运行一下,打开pycharm-terminal-输入scrapy crawl douban_spider

    5.但是每次输入的话,都很麻烦,我们新建一个run_main.py,每次运行这个文件就可以了

    from scrapy import cmdline
    cmdline.execute('scrapy crawl douban_spider'.split())
    

    6.获取单个页面信息代码

    知识点:

    1.用xpath解析网页

    2..extract()  通过xpath获取的是selector,我们在通过extract()方法得到内容 extract_first(),获取第一个内容

    3.yield 返回内容

        def parse(self, response):
         #单个页面的电影列表 movie_list = response.xpath('//*[@id="content"]/div/div[1]/ol/li') for i_item in movie_list:
            #声明item.py方法 douban_item = DoubanItem() douban_item['serial_number'] = i_item.xpath(".//div[@class='item']//em/text()").extract_first() douban_item['movie_name'] = i_item.xpath(".//div[@class='info']//span[@class='title']/text()").extract_first() douban_item['movie_introduce'] = i_item.xpath(".//div[@class='bd']//span[@class='inq']/text()").extract_first() douban_item['movie_start'] = i_item.xpath(".//div[@class='star']//span[@class='rating_num']/text()").extract_first() douban_item['movie_evaluate'] = i_item.xpath(".//div[@class='star']//span[4]/text()").extract_first() content = i_item.xpath(".//div[@class='item']//div[@class ='bd']//p/text()").extract() yield douban_item

      

    7.获取所有的完整的页面代码

    class DoubanSpiderSpider(scrapy.Spider):
        #爬虫名
        name = 'douban_spider'
        #允许爬虫的域名
        allowed_domains = ['movie.douban.com']
        #入口url,放到调度器里->到引擎->到下载器->返回到scarpy
        start_urls = ['http://movie.douban.com/top250']
    
        def parse(self, response):
            movie_list = response.xpath('//*[@id="content"]/div/div[1]/ol/li')
            for i_item in movie_list:
                douban_item = DoubanItem()
                douban_item['serial_number'] = i_item.xpath(".//div[@class='item']//em/text()").extract_first()
                douban_item['movie_name'] = i_item.xpath(".//div[@class='info']//span[@class='title']/text()").extract_first()
                douban_item['movie_introduce'] = i_item.xpath(".//div[@class='bd']//span[@class='inq']/text()").extract_first()
                douban_item['movie_start'] = i_item.xpath(".//div[@class='star']//span[@class='rating_num']/text()").extract_first()
                douban_item['movie_evaluate'] = i_item.xpath(".//div[@class='star']//span[4]/text()").extract_first()
    
                content = i_item.xpath(".//div[@class='item']//div[@class ='bd']//p/text()").extract()
                yield douban_item
        #下一页的xpath
            next_link = response.xpath("//*[@id='content']//span[@class='next']//link/@href").extract()
        #如果是true,执行,并且回调self.parse if next_link: next_link = next_link[0] print(next_link) yield scrapy.Request("https://movie.douban.com/top250"+next_link,callback=self.parse)

      

     参考文档:https://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html

     

  • 相关阅读:
    React学习笔记
    士兵杀敌(一)
    网络爬虫Java实现抓取网页内容
    德莱联盟
    计算球体积
    在页面上 获取键盘事件
    一起玩转mysql
    腾讯云 做出的 不错的 动画 chrome小插件
    jquery MD5
    json to xml
  • 原文地址:https://www.cnblogs.com/totoro-cat/p/10319305.html
Copyright © 2020-2023  润新知