标签:
scrapy startproject tutorial
这些文件主要是:
Items是将要装载机抓取的数据的容器,跟python里面的字典差不多,但它提供更多的保护,如对未定义的字段填充,以防止拼写错误。
我们通过将需要的item模块化,来控制从dmoz.org获得的站点数据,比如说站点的名字、url和网站描述。定义一下这三种属性的域,编辑一下tuto目录下的items.py
from scrapy.item import Item, Field
class DmozItem(Item):
title = Field()
link = Field()
desc = Field()
Spider是用户编写的类,用于从一个域(或域组)中抓取信息。
它们定义了用于下载URL的初步列表,如何跟踪链接,以及如何来解析这些网页内容用于提取items。
要建立一个Spider,必须为scrapy.spider.BaseSpider创建一个子类,并确定三个主要的、强制的属性:
在tutorial/spiders目录下,新建一个dmoz_spider.py的文件
from scrapy.spider import BaseSpider
class DmozSpider(BaseSpider):
name="dmoz"
allowed_domains=["dmoz.org"]
start_urls=[
"http://www.dmoz.org/Computers/Programming/Languages/Python/Books",
"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources"
]
def parse(self,response):
filename=response.url.split("/")[-2]
open(filename,‘wb‘).write(response.body)
在终端输入下面命令:
[KANO@kelvin tutorial]$ scrapy crawl dmoz
你将会得到如下类似输出:
Scrapy使用一种叫做XPath selectors的机制,它基于XPath表达式。
关于XPath表达式的提取,可以使用XPath checker插件,而chrome用户则可以直接使用F12查看XPath
Selectors 有三种方法
将代码加到原代码中,
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
class DmozSpider(BaseSpider):
name = "dmoz"
allowed_domains = ["dmoz.org"]
start_urls = [
"http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
]
def parse(self, response):
hxs = HtmlXPathSelector(response)
sites = hxs.path(‘//fieldset/ul/li‘)
for site in sites:
title = site.path(‘a/text()‘).extract()
link = site.path(‘a/@href‘).extract()
desc = site.path(‘text()‘).extract()
print title, link
Spiders希望将其抓取的数据存放到Item对象中。为了返回我们抓取数据,spider的最终代码应当是这样:
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from tutorial.items import DmozItem
class DmozSpider(BaseSpider):
name = "dmoz"
allowed_domains = ["dmoz.org"]
start_urls = [
"http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
]
def parse(self, response):
hxs = HtmlXPathSelector(response)
sites = hxs.path(‘//fieldset/ul/li‘)
#sites = hxs.path(‘//ul/li‘)
items = []
for site in sites:
item = DmozItem()
item[‘title‘] = site.path(‘a/text()‘).extract()
item[‘link‘] = site.path(‘a/@href‘).extract()
item[‘desc‘] = site.path(‘text()‘).extract()
items.append(item)
return items
保存信息的最简单的方法是通过Feed exports
scrapy crawl dmoz -o items.json -t json
标签:
原文地址:http://www.cnblogs.com/XBlack/p/5003405.html