手把手教你用Scrapy建立自己的数据集
Scrapy入门教程

Scrapy⼊门教程Scrapy 是⽤ Python 实现的⼀个为了爬取⽹站数据、提取结构性数据⽽编写的应⽤框架。
Scrapy 常应⽤在包括数据挖掘,信息处理或存储历史数据等⼀系列的程序中。
通常我们可以很简单的通过 Scrapy 框架实现⼀个爬⾍,抓取指定⽹站的内容或图⽚。
Scrapy架构图(绿线是数据流向)Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。
Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照⼀定的⽅式进⾏整理排列,⼊队,当引擎需要时,交还给引擎。
Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spide r来处理,Spider(爬⾍):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进⼊Scheduler(调度器). Item Pipeline(管道):它负责处理Spider中获取到的Item,并进⾏进⾏后期处理(详细分析、过滤、存储等)的地⽅。
Downloader Middlewares(下载中间件):你可以当作是⼀个可以⾃定义扩展下载功能的组件。
Spider Middlewares(Spider中间件):你可以理解为是⼀个可以⾃定扩展和操作引擎和Spider中间通信的功能组件(⽐如进⼊Spider的Responses;和从Spider 出去的Requests)Scrapy的运作流程代码写好,程序开始运⾏...1 引擎:Hi!Spider, 你要处理哪⼀个⽹站?2 Spider:⽼⼤要我处理。
3 引擎:你把第⼀个需要处理的URL给我吧。
4 Spider:给你,第⼀个URL是。
《scrapy入门》课件

检查Scrapy的配置文件是否正确,特 别是`settings.py`中的设置项是否符 合要求。确保所有依赖项都已正确安 装,并且版本兼容。
数据解析错误
总结词
在抓取数据时,可能会遇到数据解析 错误,导致无法正确提取所需信息。
详细描述
检查解析数据的代码是否正确,特别 是正则表达式或BeautifulSoup的使 用是否得当。确保目标网站的结构未 发生改变,以避免解析规则失效。
04
Scrapy进阶使用
使用选择器
选择器是用于从网页中提取数据的工具。在 Scrapy中,常用的选择器有CSS选择器和 XPath选择器。
CSS选择器使用"."来标识类名,使用"#"来标 识ID,使用"/"来标识标签名。例如,".title" 表示选取类名为"title"的元素,"#content" 表示选取ID为"content"的元素,"//p"表示 选取所有p标签元素。
使用Scrapy Shell
Scrapy Shell是一个交互式命令行工 具,用于在Scrapy项目中进行数据提 取和测试。通过Scrapy Shell,可以 直接在网页上查看和测试选择器的结 果,方便进行数据提取和调试。
VS
使用Scrapy Shell的方法是在命令行 中输入"scrapy shell URL",其中 URL是要抓取的网页地址。在Scrapy Shell中,可以使用"response.css()" 或"response.xpath()"方法来提取数 据,并使用Python的print()函数来 查看结果。同时,还可以使用Scrapy Shell进行数据清洗和处理的测试,方 便进行数据预处理和提取。
设计爬虫获取数据源活用Scrapy框架高效编制爬虫

课题:项目4 设计爬虫获取数据源第4部分活用Scrapy框架高效编制爬课次:第13次虫教学目标及要求:任务1 简介Scrapy框架(理解)任务2 安装Scrapy框架(熟悉)任务3 活用Scrapy框架(掌握)教学重点:任务3 活用Scrapy框架(掌握)教学难点:任务3 活用Scrapy框架(掌握)思政主题:旁批栏:教学步骤及内容:1.课程引入2.本次课学习内容、重难点及学习要求介绍3.本次课的教学内容(1)任务1 简介Scrapy框架(理解)Scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架,只需要实现少量代码,就能够快速的抓取到数据内容。
它是一个基于Twisted的异步处理框架,是纯Python实现的爬虫框架。
它的功能非常强大,爬取效率高,相关扩展组件多,可配置和可扩展程度非常高,它几乎可以应对所有反爬网站,是目前Python中使用最广泛的爬虫框架。
scrapy 框架结构图Scrapy主要包括了以下组件引擎(Engine)。
负责Spider、ItemPipeline、Downloader、Scheduler中间通讯,信号、数据传递等,是整个框架的核心。
项目(Item)。
定义了爬取结果的数据结构,爬取的数据会被赋值成该Item对象调度器(Scheduler)。
接受引擎发过来的请求, 将其压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址。
下载器(Downloader)。
下载网页内容, 并将网页内容返回给蜘蛛(Scrapy 下载器是建立在twisted这个高效的异步模型上的)Scrapy主要包括了以下组件爬虫(Spiders)。
蜘蛛,通过实际需求定义数据爬取逻辑和数据解析规则,并将解析后的结果Requests和Items分别发送给Scheduler和Pipeline 做进一步处理。
python scrapy爬虫实例

一、介绍Python Scrapy爬虫Python Scrapy是一个开源的网络爬虫框架,可用于抓取和提取全球信息站信息。
它基于Twisted和Reactor模块,提供了一种简单、可扩展的方式进行Web抓取。
Scrapy可用于数据挖掘、监测和自动化测试等领域,是一个强大的工具。
在本文中,我们将介绍Python Scrapy的基本用法,并举例说明如何利用Scrapy进行全球信息站信息抓取。
二、安装Python Scrapy1. 安装Python确保您的系统中已经安装了Python。
如果没有安装Python,您可以访问冠方全球信息站下载并安装最新版本的Python。
2. 安装Scrapy一旦Python安装完成,您可以使用pip命令来安装Scrapy。
在命令行中输入以下命令:```pip install scrapy```这将会自动下载并安装Scrapy框架。
三、编写爬虫1. 创建项目在命令行中,进入您希望存放爬虫项目的目录,然后输入以下命令:```scrapy startproject <项目名称>```这将会创建一个新的Scrapy项目。
2. 定义Item在项目的items.py文件中,您可以定义要抓取的数据类型。
例如:```pythonimport scrapyclass ArticleItem(scrapy.Item):title = scrapy.Field()content = scrapy.Field()```在这个例子中,我们定义了一个名为ArticleItem的数据类型,其中包含标题和内容两个字段。
3. 创建Spider编写一个Spider来定义抓取全球信息站的行为。
在项目目录下,输入以下命令:```scrapy genspider <爬虫名称> <目标域名>```这将会创建一个新的Spider。
在Spider中,您可以定义如何从目标全球信息站中抓取数据,并将数据存入前面定义的Item中。
Scrapy基本使用

Scrapy基本使⽤:把Twisted-17.1.0-cp36-cp36m-win_amd64.whl改为Twisted-17.1.0-py36-none-any.whl然后再进⾏安装。Scrapy是⼀个⼤⽽全的爬⾍组件;Scrapy是⼀个为了爬取⽹站数据,提取结构性数据⽽编写的应⽤框架。 其可以应⽤在数据挖掘,信息处理或存储历史数据等⼀系列的程序中。其最初是为了页⾯抓取 (更确切来说, ⽹络抓取 )所设计的, 也可以应⽤在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通⽤的⽹络爬⾍。Scrapy⽤途⼴泛,可以⽤于数据挖掘、监测和⾃动化测试。
⼀、Scrapy的安装window:a. pip3 install wheelb. 下载twisted c. cmd切换到Twisted⽬录,执⾏ pip3 install Twisted‑17.1.0‑py36‑none-any.whld. pip3 install scrapy
⼆、Scrapy的基本使⽤1、新建⼀个⽂件day125:C:\Python\zh\day125, 切换⾄此⽬录下2、创建projectcmd创建⼀个project,名称为xdb ---在cmd中:C:\Python\zh\day125>scrapy startproject xdb执⾏上⾯命令后在day125中会⾃动⽣成⼀个名为xdb的项⽬,⾥⾯有两个⽂件:
xdb⽂件中: ⽂件说明:spiders 爬⾍⽬录,如:创建⽂件,编写爬⾍规则items.py 设置数据存储模板,⽤于结构化数据,如:Django的Modelmiddlewares.py 中间件pipelines 数据处理⾏为,如:⼀般结构化的数据持久化settings.py 配置⽂件,如:递归的层数、并发数,延迟下载等
3、创建爬⾍项⽬:切换⾄xdb⽬录下,在cmd中:C:\Python\zh\day125\xdb>scrapy genspider chouti chouti.com
scrapy的运行流程

scrapy的运行流程Scrapy是一个强大的Python开源网络爬虫框架,用于快速、高效地从网页中提取数据。
它基于Twisted异步网络框架,具有高度的可扩展性和灵活性。
下面将介绍Scrapy的运行流程。
首先,Scrapy通过命令行工具创建一个新的Scrapy项目。
在项目中,我们可以定义爬虫、管道、中间件等组件,以及设置一些全局配置。
接下来,我们需要定义一个爬虫。
爬虫是Scrapy的核心组件,用于定义如何从网页中提取数据。
我们可以通过继承Scrapy提供的Spider类来创建自己的爬虫。
在爬虫中,我们需要定义起始URL、如何解析网页、如何提取数据等逻辑。
当我们运行Scrapy项目时,Scrapy会根据我们定义的爬虫,从起始URL开始发送HTTP请求。
Scrapy使用Twisted框架来异步处理这些请求,以提高效率。
当收到响应时,Scrapy会将响应交给爬虫进行处理。
在爬虫中,我们可以通过编写解析函数来解析网页。
解析函数接收到响应后,可以使用XPath、CSS选择器等方式来定位和提取我们需要的数据。
我们可以通过编写多个解析函数来处理不同类型的网页,以适应不同的数据提取需求。
在解析函数中,我们可以使用Scrapy提供的Item类来定义数据模型。
Item类类似于一个字典,用于存储从网页中提取的数据。
我们可以在解析函数中创建Item对象,并将提取到的数据填充到Item中。
当解析函数完成数据提取后,我们可以通过yield关键字将Item对象传递给Scrapy的管道。
管道是Scrapy的另一个核心组件,用于处理Item对象。
我们可以在管道中定义一系列的数据处理操作,例如数据清洗、数据存储等。
Scrapy会按照管道的优先级顺序依次调用管道中的处理方法。
在管道中,我们可以将数据存储到数据库、写入文件、发送到消息队列等。
我们还可以通过设置管道的开关,选择是否启用某个管道。
除了管道,Scrapy还提供了中间件机制。
数据集构建流程
数据集构建流程
1.确定数据集目标:首先需要明确数据集的目标,这是决定数据集构建流程的重要一步。
数据集的目标可能是用于机器学习模型训练、数据分析或者其他用途。
2.确定数据来源和采集方式:根据数据集目标,确定数据来源,并选择合适的采集方式。
数据来源可以是公共数据集或者自己采集的数据,采集方式可以是爬虫、传感器、问卷等。
3.数据预处理:采集的原始数据通常存在一些问题,需要进行预处理。
比如去除异常值、处理缺失值、标准化数据等。
4.数据清洗:在数据预处理的基础上,还需要进行数据清洗。
数据清洗包括去除重复数据、纠正错误数据、处理异常数据等。
5.数据标注:数据标注是将数据打上标签或者分类的过程。
对于机器学习来说,数据标注是至关重要的一步。
数据标注可以是手动标注或者自动标注,具体视数据集的特点而定。
6.数据划分和验证:将数据集分为训练集、验证集和测试集。
训练集用于模型训练,验证集用于模型选择,测试集用于模型评估。
数据划分需要遵循一定的比例和随机性原则。
7.数据集发布和维护:数据集构建完成后,需要进行发布和维护。
数据集的发布可以是公开发布或者私有发布,维护包括数据更新、数据质量检查等。
8.数据集应用:数据集构建完成后,可以应用于机器学习模型训练、数据分析等领域,为企业和个人的决策提供支持。
scrapy item方法 -回复
scrapy item方法-回复Scrapy Item方法,一步一步详细介绍Scrapy是一个用Python编写的开源网络爬虫框架,用于抓取互联网上的数据。
在Scrapy中,Item是一种简单且易于使用的容器,用于保存爬取的数据。
本篇文章将一步一步详细介绍Scrapy Item方法,包括Item类的创建、数据字段的定义和使用。
第一步:创建Item类在Scrapy中,需要首先创建一个Item类,该类用于定义要爬取数据的结构。
通常情况下,每个Item类对应一个数据模型,而每个实例则代表一个具体的数据对象。
创建Item类的方法如下:pythonimport scrapyclass MyItem(scrapy.Item):# 定义数据字段field1 = scrapy.Field()field2 = scrapy.Field()...以上代码创建了一个名为MyItem的Item类,并定义了两个数据字段field1和field2。
你可以根据需要添加更多的字段。
第二步:定义数据字段在创建Item类时,需要定义数据字段,以便在后续的爬虫过程中存储数据。
Scrapy提供了Field类,用于定义不同类型的数据字段。
常用的Field类型包括:- scrapy.Field:默认的字段类型,用于存储通用类型的数据。
- scrapy.IntField:用于存储整数类型的数据。
- scrapy.FloatField:用于存储浮点数类型的数据。
- scrapy.BoolField:用于存储布尔类型的数据。
- scrapy.DateField:用于存储日期类型的数据。
- scrapy.DateTimeField:用于存储日期时间类型的数据。
在定义数据字段时,可以指定字段的默认值和其他属性。
例如,可以指定一个字段为必填项,或者设置最大长度等。
以下是一个示例,展示了如何定义数据字段:pythonimport scrapyclass MyItem(scrapy.Item):# 定义通用类型字段field1 = scrapy.Field(default='default value', max_length=100)# 定义整数字段field2 = scrapy.IntField(default=0)# 定义布尔字段field3 = scrapy.BoolField(default=False)# 定义日期字段field4 = scrapy.DateField()# 定义浮点数字段field5 = scrapy.FloatField()...第三步:使用Item类在爬虫过程中,当爬取到数据时,需要创建一个Item类的实例,并给其字段赋值。
scrapy爬虫流程
scrapy爬虫流程一、什么是Scrapy爬虫Scrapy是一个基于Python的开源网络爬虫框架,用于快速、高效地从网页中提取数据。
它具有强大的功能和灵活的架构,能够自动化处理网页的下载、数据提取、数据存储等任务,并支持异步处理,可以快速、稳定地爬取大规模网站的数据。
二、Scrapy爬虫流程Scrapy的爬虫流程可以分为以下几个步骤:1. 创建项目首先,我们需要在本地创建一个Scrapy项目。
可以使用命令行工具scrapy startproject来创建一个新的项目,并指定项目的名称。
命令示例:scrapy startproject myproject2. 定义Item在Scrapy中,Item用于定义待爬取的数据结构。
我们需要创建一个Item类,并在其中定义需要提取的字段。
示例代码:import scrapyclass MyItem(scrapy.Item):title = scrapy.Field()content = scrapy.Field()...3. 编写SpiderSpider是Scrapy中负责爬取网页的组件。
我们需要在项目中创建一个Spider类,并编写爬取规则。
爬取规则是通过XPath或CSS选择器来定位需要的数据。
import scrapyclass MySpider(scrapy.Spider):name = 'myspider'start_urls = ['def parse(self, response):# 解析response对象,提取数据titles = response.xpath('//h1/text()').getall()contents = response.xpath('//p/text()').getall()# 创建Item对象,保存提取的数据for i in range(len(titles)):item = MyItem()item['title'] = titles[i]item['content'] = contents[i]yield item# 提取下一页的链接,继续爬取next_page_url = response.css('a.next-page::attr(href)').get() if next_page_url is not None:yield response.follow(next_page_url, self.parse)4. 配置PipelinePipeline用于处理爬取到的数据,并进行后续的处理。
python爬虫框架—Scrapy安装及创建项目
python爬⾍框架—Scrapy安装及创建项⽬
linux版本安装
pip3 install scrapy
安装完成
windows版本安装
1. pip install wheel
2. 下载twisted,⽹址:,选择好与系统对应的版本
3. cmd切换到twisted⽂件⽬录,执⾏安装命令:pip3 install “twisted⽂件名”
4. pip install pywin32
5. pip install scrapy
安装完成
创建scrapy⼯程项⽬
1、cmd切换到准备创建的项⽬⽬录
2、执⾏创建命令:scrapy startproject 项⽬名称
ps:项⽬名称必须以字母开头,只能包含数字、字母、下划线
创建好后⽬录如下:
3、cmd⽬录切换⾄第四次层spiders,执⾏命令创建爬⾍⽂件:scrapy genspider "爬⾍⽂件名称" 将要爬取的url (这⾥的名称和url都可以创建好后更改,所以先简单创⼀个) ;
4、执⾏⼯程,启动爬⾍项⽬:scrapy crawl "爬⾍项⽬名称" (创建的爬⾍⽂件类中的 name 属性值)
over,接下来逐步总结具体使⽤⽅式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用Scrapy建立自己的数据集数据科学中,数据的爬取和收集是非常重要的一个部分。
本文将以众筹网站FundRazr为例,手把手教你如何从零开始,使用Python中非常简便易学的Scrapy 库来爬取网络数据。
当我开始工作时,我很快意识到有时你必须收集、组织和清理数据。
本教程中,我们将收集一个名为FundRazr(https:///)的众筹网站的数据。
像许多网站一样,该网站具有自己的结构、形式,并具有大量可访问的有用数据,但由于没有结构化的API,很难从站点获取数据。
因此,我们将爬取这个网站,获得非结构化的网站数据,并以有序的形式建立我们自己的数据集。
为了爬取网站,我们将使用Scrapy(https:///)。
简而言之,Scrapy 是一个框架,可以更轻松地构建网络爬虫并降低护它们的难度。
基本上,它可以让您更专注于使用CSS选择器进行数据提取,选取XPath表达式,而不必了解爬虫工作的具体细节。
这篇文章略微超出Scrapy文档中官方教程(https:///en/latest/intro/tutorial.html)的教学范畴,如果您需要更多地爬取某些东西,可以看着这篇文章自己做。
现在,让我们开始吧。
如果您感到迷惑,可以在新标签页打开这个视频(https:///watch?v=O_j3OTXw2_E)。
1 先决条件(入门)如果您已经拥有anaconda和谷歌Chrome(或Firefox),请跳到创建新的Scrapy项目1.1在您的操作系统上安装Anaconda(Python)。
您可以从官方网站下载anaconda,还可以自行安装,或者您可以按照下面的这些anaconda安装教程进行安装。
1.2安装Scrapy(anaconda附带Scrapy,但以防万一),您还可以在终端(mac / linux)或命令行(windows)上安装。
您可以键入以下内容:conda install -c conda-forge scrapy。
确保您有Google Chrome或Firefox,在本教程中,我使用的是Google Chrome。
如果您没有Google Chrome,可以使用此链接安装(https:///chrome/answer/95346?co=GENIE.Platform%3DDesktop&hl =en)2 创建一个新的爬取项目打开终端(mac / linux)或命令行(windows)。
进入所需的文件夹并键入:scrapystartprojectfundrazr,这就会生成一个含有如下内容的fundrazr目录:Right click on the “Next” button (enclosed within the red rectangle) and then click on inspect The highlighted portion in blue just means we append the following to our url (if we want another page of campaigns):find ? category=Health&page=23使用Google Chrome浏览器(或Firefox)查找好起始URL在爬虫框架中,start_urls是当没有指定特定网址时爬虫开始抓取的网址列表。
我们将使用start_urls列表中的元素来获取单个筹款活动链接。
3.1选择类别下面的图片显示,根据您选择的类别,您将获得不同的起始网址。
黑色突出显示的部分是我们此次爬取的分类。
找到一个很好的第一个start_url对于本教程,列表start_urls中的第一个是:https:///find?category=Health3.2获取更多的元素来放入start_urls列表这部分是关于获取更多的元素来放入start_urls列表。
我们需要找出如何去下一页,以便可以获得额外的url来放入start_urls。
Right click on the title for the first campaign you see and then click on Inspect. The text (enclosed within the red rectangle) is part of a url for an individual campaign.第一幅图:在“Next”上点击鼠标右键(红色方框内)然后点击“Inspect”第二幅图:蓝色高亮部分表示我们在我们的url后面加上了(如果我们想要另一页筹款活动:find?category=Health&page=2(通过检查“下一步”按钮获取其他元素以放入start_urls列表)第二个起始URL:https:///find?category=Health&page=2下面的代码将在本教程后面的代码中用于爬虫。
它的作用是创建一个start_urls列表。
变量npages代表的是我们想从多少个额外的页面(在第一页之后)中获取筹款活动链接。
(根据网站的现有结构生成额外的起始URL代码)4 查找单个筹款活动链接的Scrapy Shell学习如何使用Scrapy提取数据的最佳方法是使用Scrapy shell。
我们将使用可用于从HTML文档中选择元素的XPath。
我们所要做的第一件事是尝试获得提取单个筹款活动链接的xpath表达式。
首先,我们查看筹款活动的链接大致分布在HTML的哪个位置。
第一幅图:右键点击你看到的第一个筹款活动链接,然后点击“inspect”第二幅图:这个文本(红色方框内)是单个活动筹款URL 一部分(查找到单个筹款活动系列的链接)我们将使用XPath来提取包含在下面的红色矩形中的部分。
被框住的部分是我们将单独拎出来的部分网址在终端(mac / linux)中输入:scrapy shell …https:///find?category=Health'命令行输入(windows):scrapy shell “https:///find?category=Health”输入以下内容到scrapy shell(以帮助了解代码,请参见视频):response.xpath('//h2[contains(@class, 'title headline-font')]/a[contains(@class, 'campaign-link')]//@href').extract()随着时间的推移,随着网站的更新,您有可能会获得不同的URL 下面的代码是为了获取给定的初始URL所包含的所有活动链接(在First Spider部分会更详细地说明)forhref in response.xpath('//h2[contains(@class, 'titleheadline-font')]/a[contains(@class, 'campaign-link')]//@href'):# add the scheme, eg http://url = 'https:' + href.extract()通过输入exit()退出Scrapy Shell。
退出scrapy shell5 检查单个筹款活动我们已经了解了单个筹款活动链接的结构,本节将介绍各个筹款活动页面的内容。
1.接下来,我们打开一个单独的筹款活动页面(见下面的链接),以便爬取(我提醒一下,有些活动很难查看):https:///savemyarm2.使用与以前相同的检查过程,我们检查页面上的标题检查筹款活动标题3.现在我们要再次使用scrapy shell,但这次是通过一个单独的筹款活动。
我们这样做是因为我们想要了解各个筹款活动页面的格式(包括了解如何从网页中提取标题)在终端输入(mac/linux):scrappy shell 'https:///savemyarm'在命令行输入(windows):scrapy shell “https:///savemyarm'获取筹款活动标题的代码是:response.xpath('//div[contains(@id, …campaign-title')]/descendant::text()').extract()[0]4.我们可以对页面的其他部分做同样的事情。
筹集的额度:response.xpath('//span[contains(@class,'stat')]/span[contains(@class,'amount-raised')]/descendant::text()').extract()目标:response.xpath('//div[contains(@class, 'stats-primarywith-goal')]//span[contains(@class, 'stats-label hidden-phone')]/text()').extract()货币的类型:response.xpath('//div[contains(@class, 'stats-primary with-goal')]/@title').extract()筹款活动结束日期:response.xpath('//div[contains(@id,'campaign-stats')]//span[contains(@class,'stats-labelhidden-phone')]/span[@class='nowrap']/text()').extract()贡献者数量:response.xpath('//div[contains(@class, 'stats-secondary with-goal')]//span[contains(@class, 'donation-count stat')]/text()').extract()故事:response.xpath('//div[contains(@id, 'full-story')]/descendant::text()').extract()网址:response.xpath(“//meta[@property='og:url']/@content').extract()5. 退出scrapy shell:exit()爬取的主要目标是从非结构化数据源(通常是网页)中提取结构化数据。