scrapy框架的基本使用

基础使用

相关命令都是在命令行执行
  1.创建项目:scrapy startproject 项目名称 例:scrapy startproject quote_tutorial
  2.创建爬虫应用程序:
  cd project_name(进入项目目录)例:cd quote_tutorial
  scrapy genspider 应用名称 爬取网页的起始url 例:scrapy genspider quotes quotes.toscrape.com
  在步骤2执行完毕后,会在项目的spiders中生成一个应用名的py爬虫文件
  3.设置修改settings.py配置文件相关配置
  4.执行爬虫程序:scrapy crawl 应用名称
  5.执行输出指定格式进行存储:将爬取到的数据写入不同格式的文件中进行存储
   scrapy crawl qiubai -o qiubai.json
   scrapy crawl qiubai -o qiubai.xml
   scrapy crawl qiubai -o qiubai.csv


quote_tutorial文件夹内,有一个scrapy.cfg配置文件和quote_tutorial的文件夹

  • 第一层[一级quote_tutorial目录]:
  • scrapy.cfg:配置文件,不需要更改
  • quote_tutorial文件夹:第二层解释
  • 第二层[二级quote_tutorial目录]:
  • init.py
    特定文件,指明二级quote_tutorial目录为一个python模块
  • item.py:定义需要的item类【实验中需要用到】
  • pipeline.py:管道文件,传入item.py中的item类,清理数据,保存或入库
  • settings.py:设置文件,例如设置用户代理和初始下载延迟
  • spiders目录:第三层解释
  • 第三层【spiders目录】
  • init.py
    特定文件,指明二级first_spider目录为一个python模块
    这里是放自定义爬虫的py文件,负责从html中获得数据,传入上一层管道文件中进行数据清理。
  • quotes.py
    主要编码的地方,负责解析文本内容。

下面我们尝试进行项目实战演练
目标站点:scrapy官方提供的抓取网站,主要是名人名言、作者标签之类的信息

项目的创建

进入命令行,切换到工程文件夹执行:

  • scrapy startproject quote_tutorial
  • cd quote_tutorial
  • scrapy genspider quotes quotes.toscrape.com
    打开pycharm,会发现如下图界面


我们到items.py中建立自己的存储块

分析目标网站





解析代码如下:

    def parse(self, response):
        quotes = response.css('.quote')  # 筛选class = "quote" 的div
        for quote in quotes:

            text = quote.css('.text::text').extract_first()
            # 进一步筛选,'.text::text'输出text文本的内容,extract_first找第一个
            author = quote.css('.author::text').extract_first()
            # 进一步筛选,'.text::text'输出text文本的内容
            tags = quote.css(".tags .tag::text").extract()
            # extract把所有结果全部找出来,类似于find和findall的关系

            item = QuoteTutorialItem()
            item['text'] = text
            item['author'] = author
            item['tags'] = tags
            yield item
            #这一块儿代码,对接items.py里的数据结构
            #就是建立一个字典 text的内容作为值,‘text’就是键,共同组成键值对

翻页操作

            next = response.css('.pager .next a::attr(href)').extract_first()  # 查找下一页
            url = response.urljoin(next)
            #print(next, url , '******************')
            yield scrapy.Request(url=url, callback=self.parse)
            #callback的意思就是把生成的url,传给谁去解析

整理一下:

    def parse(self, response):
        quotes = response.css('.quote')  # 筛选class = "quote" 的div
        for quote in quotes:
            text = quote.css('.text::text').extract_first()
            # 进一步筛选,'.text::text'输出text文本的内容,extract_first找第一个
            author = quote.css('.author::text').extract_first()
            # 进一步筛选,'.text::text'输出text文本的内容
            tags = quote.css(".tags .tag::text").extract()
            # extract把所有结果全部找出来,类似于find和findall的关系

            item = QuoteTutorialItem()
            item['text'] = text
            item['author'] = author
            item['tags'] = tags
            yield item
            #这一块儿代码,对接items.py里的数据结构
            #就是建立一个字典 text的内容作为值,‘text’就是键,共同组成键值对

            next = response.css('.pager .next a::attr(href)').extract_first()  # 查找下一页
            url = response.urljoin(next)
            #print(next, url , '******************')
            yield scrapy.Request(url=url, callback=self.parse)
            #callback的意思就是把生成的url,传给谁去解析

运行并存储

这里出现了拼写错误,crawl

运行结果如下


我们保存为JSON格式

输出结果:

革命尚未成功,同志仍需努力
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容