<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://index.cslt.org/mediawiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-cn">
		<id>http://index.cslt.org/mediawiki/index.php?action=history&amp;feed=atom&amp;title=FreeNeb_Scripy_Release</id>
		<title>FreeNeb Scripy Release - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http://index.cslt.org/mediawiki/index.php?action=history&amp;feed=atom&amp;title=FreeNeb_Scripy_Release"/>
		<link rel="alternate" type="text/html" href="http://index.cslt.org/mediawiki/index.php?title=FreeNeb_Scripy_Release&amp;action=history"/>
		<updated>2026-04-17T17:11:59Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.23.3</generator>

	<entry>
		<id>http://index.cslt.org/mediawiki/index.php?title=FreeNeb_Scripy_Release&amp;diff=26795&amp;oldid=prev</id>
		<title>Zhaomy：以“1.	Scrapy简介 Scrapy是一个为了爬取网站数据，提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘，信息处理或存储...”为内容创建页面</title>
		<link rel="alternate" type="text/html" href="http://index.cslt.org/mediawiki/index.php?title=FreeNeb_Scripy_Release&amp;diff=26795&amp;oldid=prev"/>
				<updated>2017-04-24T01:58:54Z</updated>
		
		<summary type="html">&lt;p&gt;以“1.	Scrapy简介 Scrapy是一个为了爬取网站数据，提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘，信息处理或存储...”为内容创建页面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;1.	Scrapy简介&lt;br /&gt;
Scrapy是一个为了爬取网站数据，提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘，信息处理或存储历史数据等一系列的程序中。&lt;br /&gt;
其最初是为了 页面抓取 (更确切来说, 网络抓取 )所设计的， 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。&lt;br /&gt;
a)	结构图&lt;br /&gt;
 &lt;br /&gt;
b)	组件&lt;br /&gt;
i.	引擎(Scrapy)&lt;br /&gt;
用来处理整个系统的数据流处理, 触发事务(框架核心)&lt;br /&gt;
ii.	调度器(Scheduler)&lt;br /&gt;
用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL（抓取网页的网址或者说是链接）的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址&lt;br /&gt;
iii.	下载器(Downloader)&lt;br /&gt;
用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)&lt;br /&gt;
iv.	爬虫(Spiders)&lt;br /&gt;
爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面&lt;br /&gt;
v.	项目管道(Pipeline)&lt;br /&gt;
负责处理爬虫从网页中抽取的实体，主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后，将被发送到项目管道，并经过几个特定的次序处理数据。&lt;br /&gt;
vi.	下载器中间件(Downloader Middlewares)&lt;br /&gt;
位于Scrapy引擎和下载器之间的框架，主要是处理Scrapy引擎与下载器之间的请求及响应。&lt;br /&gt;
vii.	爬虫中间件(Spider Middlewares)&lt;br /&gt;
介于Scrapy引擎和爬虫之间的框架，主要工作是处理蜘蛛的响应输入和请求输出。&lt;br /&gt;
viii.	调度中间件(Scheduler Middewares)&lt;br /&gt;
介于Scrapy引擎和调度之间的中间件，从Scrapy引擎发送到调度的请求和响应。&lt;br /&gt;
2.	安装&lt;br /&gt;
a)	先安装anaconda，这个集成了Python很多现成的库，安装scrapy的依赖包都包含了。&lt;br /&gt;
b)	pip install Scrapy&lt;br /&gt;
3.	创建项目&lt;br /&gt;
a)	Scrappy startproject xinlanwang xinlanwang 结果如下&lt;br /&gt;
 &lt;br /&gt;
b)	文件说明&lt;br /&gt;
•	scrapy.cfg  项目的配置信息，主要为Scrapy命令行工具提供一个基础的配置信息。（真正爬虫相关的配置信息在settings.py文件中）&lt;br /&gt;
•	items.py    设置数据存储模板，用于结构化数据&lt;br /&gt;
•	pipelines    数据处理行为，如：一般结构化的数据持久化&lt;br /&gt;
•	settings.py 配置文件，如：递归的层数、并发数，延迟下载等。如果要爬取的网站禁止爬虫，修改ROBOTSTXT_OBEY这个参数为false即可。&lt;br /&gt;
•	spiders.py  爬虫目录，如：创建文件，编写爬虫规则，必须要继承scrapy.Spider类，name变量不能为空，这个name就是允许爬虫的时候要输入的名字。必须要有一个parse函数，负责解析内容或者url，爬虫源码中默认调用parse函数。定义需要爬取的url，放在列表中，因为可以爬取多个url，Scrapy源码是一个For循环，从上到下爬取这些url，使用生成器迭代将url发送给下载器下载url的html&lt;br /&gt;
4.	定义Item&lt;br /&gt;
a)	解释，是保存到的爬到的数据的容器，和字典一样，并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。&lt;br /&gt;
b)	代码，其实就像python的字典一样调用就行&lt;br /&gt;
class Product(scrapy.Item):&lt;br /&gt;
    name = scrapy.Field()&lt;br /&gt;
    price = scrapy.Field()&lt;br /&gt;
    stock = scrapy.Field()&lt;br /&gt;
    last_updated = scrapy.Field(serializer=str)&lt;br /&gt;
&lt;br /&gt;
product = Product(name='Desktop PC', price=1000, stock = &amp;quot;dongfangcaifu&amp;quot;)&lt;br /&gt;
print product&lt;br /&gt;
{'name': 'Desktop PC', 'price': 1000, 'stock': 'dongfangcaifu'}&lt;br /&gt;
5.	编写爬虫脚本&lt;br /&gt;
a)	代码&lt;br /&gt;
import scrapy&lt;br /&gt;
&lt;br /&gt;
class DmozSpider(scrapy.Spider):&lt;br /&gt;
    name = &amp;quot;xinlanwang&amp;quot;&lt;br /&gt;
    allowed_domains = [&amp;quot;dmoz.org&amp;quot;]&lt;br /&gt;
   # 爬这个list中的url&lt;br /&gt;
    start_urls = [&lt;br /&gt;
        &amp;quot;http://www.dmoz.org/Computers/Programming/Languages/Python/Books/&amp;quot;,&lt;br /&gt;
        &amp;quot;http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
    def parse(self, response):&lt;br /&gt;
        filename = response.url.split(&amp;quot;/&amp;quot;)[-2]&lt;br /&gt;
        with open(filename, 'wb') as f:&lt;br /&gt;
            f.write(response.body)&lt;br /&gt;
b)	爬取，scrapy crawl xinlanwang，scrapy为spider的start_urls属性中的每个url创建scrapy.Request对象，并将parse方法作为回调函数赋值给了Request。Request对象经过调度，执行生成scrapy.http.Request对象并送回给spider的parse()方法。&lt;br /&gt;
c)	提取Item&lt;br /&gt;
i.	Selector选择器&lt;br /&gt;
xpath(): 传入xpath表达式，返回该表达式所对应的所有节点的selector list列表 。&lt;br /&gt;
css(): 传入CSS表达式，返回该表达式所对应的所有节点的selector list列表.&lt;br /&gt;
extract(): 序列化该节点为unicode字符串并返回list。&lt;br /&gt;
re(): 根据传入的正则表达式对数据进行提取，返回unicode字符串list列表。&lt;br /&gt;
ii.	简单的Xpath举例&lt;br /&gt;
/html/head/title: 选择HTML文档中 &amp;lt;head&amp;gt; 标签内的 &amp;lt;title&amp;gt; 元素&lt;br /&gt;
/html/head/title/text(): 选择上面提到的 &amp;lt;title&amp;gt; 元素的文字&lt;br /&gt;
//td: 选择所有的 &amp;lt;td&amp;gt; 元素&lt;br /&gt;
//div[@class=&amp;quot;mine&amp;quot;]: 选择所有具有 class=&amp;quot;mine&amp;quot; 属性的 div 元素&lt;br /&gt;
iii.	Shell中使用选择器&lt;br /&gt;
1.	需要安装ipython工具，就是一个在shell里找selector的方法，比如输入&lt;br /&gt;
scrapy shell http://www.dmoz.org/Computers/Programming/Languages/Python/Books/ 后返回response对象，具有xpath等属性方便调试selector&lt;br /&gt;
d)	使用item提取数据，对于简单的item提取可以放在spider中，较为复杂的可以编写 Item Pipeline文件&lt;br /&gt;
i.	代码&lt;br /&gt;
import scrapy&lt;br /&gt;
&lt;br /&gt;
from tutorial.items import DmozItem&lt;br /&gt;
&lt;br /&gt;
class DmozSpider(scrapy.Spider):&lt;br /&gt;
    name = &amp;quot;xinlanwang&amp;quot;&lt;br /&gt;
    allowed_domains = [&amp;quot;dmoz.org&amp;quot;]&lt;br /&gt;
    start_urls = [&lt;br /&gt;
        &amp;quot;http://www.dmoz.org/Computers/Programming/Languages/Python/Books/&amp;quot;,&lt;br /&gt;
        &amp;quot;http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
    def parse(self, response):&lt;br /&gt;
        for sel in response.xpath('//ul/li'):&lt;br /&gt;
            item = DmozItem()&lt;br /&gt;
            item['title'] = sel.xpath('a/text()').extract()&lt;br /&gt;
            item['link'] = sel.xpath('a/@href').extract()&lt;br /&gt;
            item['desc'] = sel.xpath('text()').extract()&lt;br /&gt;
            yield item&lt;br /&gt;
ii.	运行并保存数据&lt;br /&gt;
1.	scrappy crawl xinlanwang –o item.json&lt;br /&gt;
6.	下载器中间件（Download Middlewares）&lt;br /&gt;
下载中间件是处于引擎(crawler.engine)和下载器(crawler.engine.download())之间的一层组件，可以有多个下载中间件被加载运行。&lt;br /&gt;
当引擎传递请求给下载器的过程中，下载中间件可以对请求进行处理 （例如增加http header信息，增加proxy信息等）；&lt;br /&gt;
在下载器完成http请求，传递响应给引擎的过程中， 下载中间件可以对响应进行处理（例如进行gzip的解压等）&lt;br /&gt;
要激活下载器中间件组件，将其加入到 DOWNLOADER_MIDDLEWARES 设置中。 该设置是一个字典(dict)，键为中间件类的路径，值为其中间件的顺序(order)。&lt;/div&gt;</summary>
		<author><name>Zhaomy</name></author>	</entry>

	</feed>