首页 > 其他分享 >scrapy目录结构与解析方式

scrapy目录结构与解析方式

时间:2024-02-23 16:14:11浏览次数:31  
标签:item scrapy article post 解析 extract 目录 css desc

scrapy目录结构

myfirstscrapy  # 项目名字
    -myfirstscrapy # 包
    	-__init__.py
    	-spiders # 包 放爬虫,可能会有很多爬虫
        	-__init__.py
    		-cnblogs.py # 爬虫文件--》一个爬虫就是一个文件,可以写多个
    
    	-items.py # 放一个个类---》类似于django 的models--》模型类
    	-middlewares.py # 中间件,下载,爬虫中间件
    	-pipelines.py # 持久化,保存mysql,需要写的位置
    	-settings.py # 配置文件
    -scrapy.cfg     # 上线会用

解析方式

1 response对象有css方法和xpath方法
    -css中写css选择器     response.css('')
    -xpath中写xpath选择   response.xpath('')
2 重点1:
    -xpath取文本内容
        './/a[contains(@class,"link-title")]/text()'
    -xpath取属性
       	'.//a[contains(@class,"link-title")]/@href'
    -css取文本
        'a.link-title::text'
    -css取属性
        'img.image-scale::attr(src)'
3 重点2:
    .extract_first()  取一个
    .extract()        取所有

案例:

# 使用css解析
def parse(self, response):  # css解析
        # response 就是爬完后的对象
        # print(response.text)
        # 使用css解析
        article_list = response.css('article.post-item')
        for article in article_list:
            # 标题
            title = article.css('a.post-item-title::text').extract_first()
            # 摘要 取出所有,单独处理一下
            desc = article.css('p.post-item-summary::text').extract()
            real_desc = desc[0].replace('\n', '').replace(' ', '')
            if not real_desc:
                real_desc = desc[1].replace('\n', '').replace(' ', '')
            # print(real_desc)
            # 作者:author
            author = article.css('footer.post-item-foot>a>span::text').extract_first()
            # print(author)
            # 头像
            image_url = article.css('img.avatar::attr(src)').extract_first()
            # print(image_url)
            # 发布日期
            date = article.css('span.post-meta-item>span::text').extract_first()
            # print(date)

            # 文章地址
            url = article.css('a.post-item-title::attr(href)').extract_first()

            print('''
            文章名:%s
            文章摘要:%s
            文章作者:%s
            作者头像:%s
            文章日期:%s
            文章地址:%s
            ''' % (title, real_desc, author, image_url, date, url))

# 使用xpath解析
def parse(self, response):  # xpath解析
        article_list = response.xpath('//article[@class="post-item"]')
        for article in article_list:
            # 标题
            title = article.xpath('.//a[@class="post-item-title"]/text()').extract_first()

            # 摘要 取出所有,单独处理一下
            desc = article.xpath('.//p[@class="post-item-summary"]/text()').extract()
            real_desc = desc[0].replace('\n', '').replace(' ', '')
            if not real_desc:
                real_desc = desc[1].replace('\n', '').replace(' ', '')
            # print(real_desc)
            # 作者:author
            # author = article.css('footer.post-item-foot>a>span::text').extract_first()
            author = article.xpath('.//footer[@class="post-item-foot"]/a/span/text()').extract_first()
            # print(author)
            # 头像
            # image_url = article.css('img.avatar::attr(src)').extract_first()
            image_url = article.xpath('.//img[@class="avatar"]/@src').extract_first()
            # print(image_url)
            # 发布日期
            # date = article.css('span.post-meta-item>span::text').extract_first()
            date = article.xpath('.//span[@class="post-meta-item"]/span/text()').extract_first()
            # print(date)

            # 文章地址
            # url = article.css('a.post-item-title::attr(href)').extract_first()
            url = article.xpath('.//a[@class="post-item-title"]/@href').extract_first()

            print('''
              文章名:%s
              文章摘要:%s
              文章作者:%s
              作者头像:%s
              文章日期:%s
              文章地址:%s
              ''' % (title, real_desc, author, image_url, date, url))

标签:item,scrapy,article,post,解析,extract,目录,css,desc
From: https://www.cnblogs.com/wellplayed/p/18029789

相关文章

  • 解决VMware与win10无法共享目录
    1、安装VMwareTools这一步适用于多数情况,但对于高版本的VMWare这一步无效,当然了,先试一试总没有坏处。有看见网上说如果VMware内安装的是高版本的Ubuntu,安装的VMwareTools会破坏Ubuntu。关于这一点博主没有验证,请自行验证。安装方法很简单:1)在VMware的虚拟机菜单下,点击“重......
  • 代码+案例,实战解析BeautifulSoup4
    本文分享自华为云社区《从HTML到实战:深入解析BeautifulSoup4的爬虫奇妙世界》,作者:柠檬味拥抱。网络上的信息浩如烟海,而爬虫技术正是帮助我们从中获取有用信息的重要工具。在爬虫过程中,解析HTML页面是一个关键步骤,而BeautifulSoup4正是一款功能强大的解析器,能够轻松解析HTML和XML......
  • C++动态内存分配探秘:new与malloc的关键差异及实例解析
     概述:在C++中,new和malloc均用于动态内存分配,但存在关键差异。new是C++运算符,能调用构造函数,返回类型明确;而malloc是C函数,仅分配内存,需手动类型转换。示例源代码生动演示了它们在构造函数调用和类型信息方面的不同。在C++中,new 和 malloc 都用于动态内存分配,但它们之间......
  • C++强制类型转换详解:四种操作符解析与实例演示
     概述:C++中的强制类型转换是实现数据类型间转换的关键机制,包括static_cast、dynamic_cast、const_cast和reinterpret_cast四种。这些操作符适用于不同的场景,通过实例源代码详细阐述了它们的使用方法和步骤。在C++中,强制类型转换是将一个数据类型的值转换为另一个数据类型的过......
  • Linux中在其他目录执行二进制文件
    Linux命令行中执行命令一般通过:./xxxx的方式,但前提是必须先进入二进制文件所在的目录(或者更上一层级的目录),如果在其他不相关的目录就不能通过这种方式执行。所以,最简单的方法是:查看当前的环境变量:echo$PATH,在列出的环境变量中选择一个目录,如:/home/xxx/bin,将文件放入这个目录,之后......
  • 【PostageSQL】【元信息】PostageSQL 系统目录
    1 前言可能大家平时会查看数据库中的一些原始信息,比如数据库有哪些表,表有哪些字段呀,都是什么类型呀,甚至每个表所占的空间大小,索引的空间大小、索引访问的次数呀等等,其实PgSQL都有对应的系统目录给我们,这节我们就来看看。2 层次在看元信息前,我们先了解一下数据的一个层次:......
  • MySQL 多表查询 - 缺练习解析
    多表查询【一】概要(1)联表查询innerjoin:内连接--innerjoin/join#拼接两张表中共有的数据部分select*from表2innerjoin表1on表2.字段=表1.字段;leftjoin:左外连接--leftjoin#返回左表中的所有行,以及右表中与左表中相匹配的行。如果右表中没......
  • 深入理解C++中的堆与栈:内存管理的关键区别与实例解析
     概述:C++中,堆和栈是两种不同的内存分配方式。栈自动分配、释放内存,适用于短生命周期变量;堆需要手动管理,适用于动态分配内存,但需要显式释放以防内存泄漏。通过清晰的示例源代码,演示了它们在变量生命周期、访问方式等方面的区别。C++中的堆(heap)和栈(stack)是两种内存分配和管理方......
  • stl源码解析,deque的insert_aux
    直接上结论:deque的insert_aux中插入开始会pushback或front一个和最末尾或最前面值相同的值是为了看是否需要扩充deque内存,选这个值应该是顺手。stl中deque的实现是通过一个存储指向各个存储区域指针的map(注意就是个指针地图,不是stl的map数据结构),里面再指向对应区域去存储实际......
  • scrapy框架的安装
    第一步:安装scrapy模块pipinstallscrapy第二步:在需要创建的文件夹内打开cmd窗口输入scrapystartprojectmyfirstscrapy会看到下面的命令:Youcanstartyourfirstspiderwith:cdmyfirstscrapyscrapygenspiderexampleexample.com第三步:根据命令提示输......