ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Scrapy入门探索盗墓笔记

2021-08-07 10:02:30  阅读:179  来源: 互联网

标签:入门 py scrapy 笔记 ScrapyDaomu content item Scrapy response


Scrapy入门探索盗墓笔记

声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!

 

引言

本文出自微信公众号【Python三剑客】

作者:阿K

阅读时长:5min

留言:没有精美的文案,没有动情可爱的故事情节,不想随波逐流,暂时只想努力输出好的文章,如果对大家有帮助希望大家能够点赞、收藏、分享一键三连!在此感谢各位读者!

  • 该文章为scrapy入门案例,希望能对你有所帮助

目录

一、Scrapy依赖包安装

二、创建Scrapy项目

三、items.py

四、piplines.py

五、daomu.py

六、settings.py

七、run.py[在项目文件下创建]


一、Scrapy依赖包安装

pip install scrapy

二、创建Scrapy项目

scrapy startproject ScrapyDaomu
  • 进入当前项目文件之后创建爬虫文件

  • cd ScrapyDaomu

scrapy genspider daomu "daomubiji.com"

项目结构


  • scrapy.cfg:项目的总配置文件,通常无须修改。

  • daomu项目的 Python 模块,程序将从此处导入 Python 代码。

  • ScrapyDaomu/items.py:用于定义项目用到的 Item 类。Item 类就是一个 DTO(数据传输对象),通常就是定义 N 个属性,该类需要由开发者来定义。

  • ScrapyDaomu/pipelines.py:项目的管道文件,它负责处理爬取到的信息。该文件需要由开发者编写。

  • ScrapyDaomu/settings.py:项目的配置文件,在该文件中进行项目相关配置。

  • ScrapyDaomu/spiders:在该目录下存放项目所需的蜘蛛,蜘蛛负责抓取项目感兴趣的信息。


三、items.py

import scrapy

class ScrapydaomuItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    # items 需要处理的数据:文件名、路径
    # 文件名:小标题名称  son_title: 七星鲁王 第一章 血尸
    son_title = scrapy.Field()
    directory = scrapy.Field()
    content = scrapy.Field()

四、piplines.py

class ScrapydaomuPipeline:
    def process_item(self, item, spider):
        # filename: ./novel/盗墓笔记1:七星鲁王宫/七星鲁王_第一章_血尸.txt
        filename = '{}{}.txt'.format(item['directory'], item['son_title'].replace(' ', '_'))
        with open(filename, 'w') as f:
            f.write(item['content'])

        return item

五、daomu.py

import scrapy
from ..items import ScrapydaomuItem
import os

class DaomuSpider(scrapy.Spider):
    name = 'daomu'
    allowed_domains = ['www.daomubiji.com']
    start_urls = ['http://www.daomubiji.com/']

    def parse(self, response):
        """
        一级页面解析函数:提取标题、链接,并把大连接交给调度器入队列
        """
        a_list = response.xpath('//li[contains(@id,"menu-item-20")]/a')
        for a in a_list:
            item = ScrapydaomuItem()  # 实例化item列表
            parent_title = a.xpath('./text()').get()
            parent_url = a.xpath('./@href').get()
            item['directory'] = './novel/{}/'.format(parent_title)
            # 创建对应文件夹
            if not os.path.exists(item['directory']):
                os.makedirs(item['directory'])
            # 交给调度器入队列
            yield scrapy.Request(url=parent_url, meta={'meta_1': item}, callback=self.detail_page)

    # 返回11个response,调用该函数
    def detail_page(self, response):
        """
        二级页面解析函数:提取小标题、小链接
        """
        # 接收item
        meta_1 = response.meta['meta_1']
        art_list = response.xpath('//article')
        for art in art_list:
            # 只要有继续交往调度器的请求,就必须新建item对象
            item = ScrapydaomuItem()
            item['son_title'] = art.xpath('./a/text()').get()
            son_url = art.xpath('./a/@href').get()
            item['directory'] = meta_1['directory']
            # 再次交给调度器入队列
            yield scrapy.Request(url=son_url, meta={'item': item}, callback=self.get_content)

    # 盗墓笔记1: 传过来了75个response
    # 盗墓笔记2: 传过来了 n 个response
    # ....

    def get_content(self, response):
        """三级页面解析函数:提取具体小说内容"""
        item = response.meta['item']
        # content_list: ['段落1','段落2','段落3',...]
        content_list = response.xpath('//article[@class="article-content"]/p/text()').extract()
        item['content'] = '\n'.join(content_list)

        # 至此,一条item数据全部提取完成
        yield item

六、settings.py

BOT_NAME = 'ScrapyDaomu'

SPIDER_MODULES = ['ScrapyDaomu.spiders']
NEWSPIDER_MODULE = 'ScrapyDaomu.spiders'

ROBOTSTXT_OBEY = False

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/80.0.3987.149 Safari/537.36'
}

ITEM_PIPELINES = {
   'ScrapyDaomu.pipelines.ScrapydaomuPipeline': 300,
}

七、run.py[在项目文件下创建]

from scrapy import cmdline

cmdline.execute('scrapy crawl daomu'.split())
  • 启动文件:运行run文件

 

标签:入门,py,scrapy,笔记,ScrapyDaomu,content,item,Scrapy,response
来源: https://blog.csdn.net/weixin_38640052/article/details/119478158

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有