Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Scrapy框架| 选择器-Xpath和CSS的那些事

Scrapy框架| 选择器-Xpath和CSS的那些事

作者头像
Python进击者
发布于 2019-06-21 07:58:46
发布于 2019-06-21 07:58:46
1.3K00
代码可运行
举报
文章被收录于专栏:JAVAandPython君JAVAandPython君
运行总次数:0
代码可运行

1

写在前面的话

这次接着上一篇文章来讲Scrapy框架,这次讲的是Scrapy框架里面提供的两种数据提取机制Xpath和CSS,其实除了这两种,我们还可以借助第三方库来实现数据的提取,例如:BeautifulSoup(这个在我的爬虫系列文章中有写过)和lxml(Xml解析库),Scrapy选择器是基于lxml库之上的,所以很多地方都是和lxml相似的。

2

Selector选择器

我们首先来说说CSS提取,想要学会CSS的解析,前提当然是学会html和css的基本语法,知道它是怎么构成的。

先给大家一串代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
import scrapy


class ToScrapeCSSSpider(scrapy.Spider):
    name = "toscrape-css"
    start_urls = [
        'http://quotes.toscrape.com/',
    ]

    def parse(self, response):
        # 提取class为quote的<div>标签
        for quote in response.css("div.quote"):
            yield {
                # 提取class为text的<span>的标签内的文本内容
                'text': quote.css("span.text::text").extract_first(),
                # 提取class为author的<small>的标签内的文本内容
                'author': quote.css("small.author::text").extract_first(),
                # 提取class为tags的class为tag的<a>的标签内的文本内容
                'tags': quote.css("div.tags > a.tag::text").extract()
            }

        next_page_url = response.css("li.next > a::attr(href)").extract_first()
        if next_page_url is not None:
            yield scrapy.Request(response.urljoin(next_page_url))

代码的解释我已经写在注释里面了,其实非常的简单,只要大家稍微懂得一点html和css的基础,基本就能够看出是啥意思,我们只要是对网站进行html的爬取都是一层一层地爬进去,并且每一层的标签都会都会有一个特别的标记,例如:class=“xxx”,这样我们可以通过这种特征来找到特定的数据。

xpath代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
import scrapy


class ToScrapeSpiderXPath(scrapy.Spider):
    name = 'toscrape-xpath'
    start_urls = [
        'http://quotes.toscrape.com/',
    ]

    def parse(self, response):
        for quote in response.xpath('//div[@class="quote"]'):
            yield {
                'text': quote.xpath('./span[@class="text"]/text()').extract_first(),
                'author': quote.xpath('.//small[@class="author"]/text()').extract_first(),
                'tags': quote.xpath('.//div[@class="tags"]/a[@class="tag"]/text()').extract()
            }

        next_page_url = response.xpath('//li[@class="next"]/a/@href').extract_first()
        if next_page_url is not None:
            yield scrapy.Request(response.urljoin(next_page_url))

其实xpath的代码也是类似的,代码的意思都是一样的,讲到这里相信大家对这两种选择器有了初步理解,下面我细细给大家讲讲每个知识!

3

详解Selector

  1. xpath(query):写入xpath的表达式query,返回该表达式所对应的所有的节点的selector list 列表
  2. css(query):写入css的表达式query,返回该表达式所对应的所有的节点的selector list 列表
  3. extract():序列化该节为Unicode字符串并返回list列表
  4. extract_first():序列化该节为Unicode字符串并返回第一个元素
  5. re(regex):写入正则表达式对数据进行提取,正则表达式我前面的文章详细的写过

xpath路径表达式

表达式

描述

nodename

选取此节点的所有子节点。

/

从根节点选取。

//

从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。

.

选取当前节点。

..

选取当前节点的父节点。

@

选取属性。

实例:

路径表达式

结果

bookstore

选取 bookstore 元素的所有子节点。

/bookstore

选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!

bookstore/book

选取属于 bookstore 的子元素的所有 book 元素。

//book

选取所有 book 子元素,而不管它们在文档中的位置。

bookstore//book

选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。

//@lang

选取名为 lang 的所有属性。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python进击者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Scrapy1.4最新官方文档总结 2 Tutorial创建项目提取信息XPath简短介绍继续提取名人名言用爬虫提取信息保存数据提取下一页使用爬虫参数更多例子
这是官方文档的Tutorial(https://docs.scrapy.org/en/latest/intro/tutorial.html)。 推荐四个Python学习资源: Dive Into Py
SeanCheney
2018/04/24
1.4K0
Scrapy1.4最新官方文档总结 2 Tutorial创建项目提取信息XPath简短介绍继续提取名人名言用爬虫提取信息保存数据提取下一页使用爬虫参数更多例子
Scrapy 入门教程
爬虫就是Scrapy用来从网站抓取数据的类,它们都继承于scrapy.Spider类。
Stanley Sun
2019/09/23
8130
Scrapy框架的使用之Scrapy入门
接下来介绍一个简单的项目,完成一遍Scrapy抓取流程。通过这个过程,我们可以对Scrapy的基本用法和原理有大体了解。 一、准备工作 本节要完成的任务如下。 创建一个Scrapy项目。 创建一个Spider来抓取站点和处理数据。 通过命令行将抓取的内容导出。 将抓取的内容保存的到MongoDB数据库。 二、准备工作 我们需要安装好Scrapy框架、MongoDB和PyMongo库。 三、创建项目 创建一个Scrapy项目,项目文件可以直接用scrapy命令生成,命令如下所示: scrapy st
崔庆才
2018/06/25
1.4K0
Scrapy框架
简单网页的爬取可以利用re模块,复杂网页的爬取对于内容的提取则会显得十分麻烦。Scrapy框架是python下的一个爬虫框架,因为它足够简单方便受到人们的青睐。
爱编程的小明
2022/09/05
4980
Scrapy框架
Scrapy框架| Scrapy中spiders的那些事......
今天继续更新scrapy的专栏文章,今天我们来聊一聊scrapy中spiders的用法。我们知道在整个框架体系中,spiders是我们主要进行编写的部分,所以弄清楚spiders这一块的知识,对我们学习scrapy有着很大的好处。但是这一章里大多数都是一些spiders里面的一些模板的介绍,实战代码可能会比较少,但是大家了解了这些之后,对于scrapy的使用会更加的得心应手!
Python进击者
2019/06/21
5690
Python爬虫——Scrapy爬取名人名言
toscrape是一个名人名言的网站 一条名人名言的结构如下 <div class="quote" itemscope="" itemtype="http://schema.org/CreativeWork"> <span class="text" itemprop="text">“I have not failed. I've just found 10,000 ways that won't work.”</span> <span>by <small class="au
羊羽shine
2019/05/29
9980
Scrapy 爬虫框架入门案例详解
本文介绍了如何使用 Scrapy 框架爬取知乎用户详细信息并存储到 MongoDB 数据库的过程。通过分析网页结构,使用 Scrapy 框架和 XPath、CSS 选择器提取数据,并利用 Spider 的 Item 输出格式将数据保存至 MongoDB 数据库。
崔庆才
2017/04/25
3.9K0
python爬虫 scrapy爬虫框架的基本使用
在编写爬虫的时候,如果我们使用 requests、aiohttp 等库,需要从头至尾把爬虫完整地实现一遍,比如说异常处理、爬取调度等,如果写的多了,的确会比较麻烦。利用现有的爬虫框架,可以提高编写爬虫的效率,而说到 Python 的爬虫框架,Scrapy 当之无愧是最流行最强大的爬虫框架了。
叶庭云
2020/09/17
1.6K0
Scrapy 爬虫模板--CrawlSpider
从这篇文章开始,我将利用三篇文章分别讲解 Scrapy 爬虫模板。 Scrapy 爬虫模板包含四个模板:
喵叔
2020/09/08
8790
Scrapy学习
在 scrapy_test 项目中的目录 spiders 中创建文件 quotes_spider.py
cuijianzhe
2022/06/14
1.3K0
Scrapy学习
Python3 爬虫 scrapy框架
上次用requests写的爬虫速度很感人,今天打算用scrapy框架来实现,看看速度如何。
py3study
2020/01/02
4170
Scrapy爬虫入门
安装是不是很简单呢? 现在我们通过官方的小demo来演示如何爬虫。 将下面的文件保存为22.py文件
逍遥子大表哥
2022/10/31
5880
Scrapy爬虫入门
Scrapy框架: 通用爬虫之CrawlSpider
步骤01: 创建爬虫项目 scrapy startproject quotes 步骤02: 创建爬虫模版 scrapy genspider -t quotes quotes.toscrape.com 步骤03: 配置爬虫文件quotes.py import scrapy from scrapy.spiders import CrawlSpider, Rule from scrapy.linkextractors import LinkExtractor class Quotes(CrawlSpider)
hankleo
2020/09/17
4020
Scrapy1.4最新官方文档总结 1 介绍·安装安装
现在,Scrapy的最新版本是1.4。 Scrapy的图标是个小刮铲 :) Scrapy文档的中文版现在还是1.0的:http://scrapy-chs.readthedocs.io/zh_CN/la
SeanCheney
2018/04/24
8490
Scrapy1.4最新官方文档总结 1 介绍·安装安装
scrapy 快速入门
乐百川
2018/01/09
1.3K0
scrapy 快速入门
分布式爬虫搭建系列 之三---scrapy框架初用
其次,通过我们的神器PyCharm打开我们的项目--crawlquote(也可以将PyCharm打开我们使用虚拟环境创建的项目)
wfaceboss
2019/04/08
5860
分布式爬虫搭建系列 之三---scrapy框架初用
创建scrapy项目_项目构建是什么意思
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/03
2850
创建scrapy项目_项目构建是什么意思
Scrapy 爬虫框架[通俗易懂]
​ Scrapy是一个可以爬取网站数据,为了提取结构性数据而编写的开源框架。Scrapy的用途非常广泛,不仅可以应用到网络爬虫中,还可以用于数据挖掘、数据监测以及自动化测试等。Scrapy是基于Twisted的异步处理框架,架构清晰、可扩展性强,可以灵活完成各种需求。
全栈程序员站长
2022/11/16
3.4K0
Scrapy 爬虫框架[通俗易懂]
一、了解Scrapy
Scrapy 是一个用于爬取网站并提取结构化数据的高效爬虫框架,它可以用于各种应用程序/项目,比如数据挖掘、信息处理和档案处理等。最初设计 Scrapy 是用来爬取 Web 数据的,但是现在也可以将它用于爬取 API 信息和作为通用 Web 搜索器来提取数据。
喵叔
2020/09/08
9300
项目实战 | Python爬虫概述与实践(三)
《项目实战 | python爬虫及实践(一)》中介绍了网络爬虫的定义、分类和基本流程。
用户3946442
2022/04/11
5650
项目实战 | Python爬虫概述与实践(三)
相关推荐
Scrapy1.4最新官方文档总结 2 Tutorial创建项目提取信息XPath简短介绍继续提取名人名言用爬虫提取信息保存数据提取下一页使用爬虫参数更多例子
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验