1. 程式人生 > >scrapy基本使用(二)

scrapy基本使用(二)

保持 了解 編寫 select 參數 cto lis 包含 pip

參考鏈接: http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html#id5

scrapy基本使用(一) http://www.cnblogs.com/zhaijiahui/p/6973858.html

了解一些基礎,接下來我們該從源碼裏,扒出你想要的東西了。

這裏就要用到一個叫選擇器(Selectors)的東西了。

首先思考幾個問題:

1)選擇器的作用是什麽?

從網頁源碼中提取出想要的數據。我理解python中的re,BeautifulSoup作用類似。

2)選擇器如何工作?

用的是XPath,在xml和html上的節點語言,什麽是節點語言?我理解這裏就是在匹配一個個標簽<div>,<a>,<span>等等,這樣匹配的效率更高更準確。

下面是如何使用選擇器

3)如何使用選擇器?

3.1 官方的使用方法

from scrapy.selector import Selector

這樣只需要調用Selector(response)就等價於scrapy.selector.Selector(response)

3.2 如何使用XPath來匹配內容呢?

舉個例子:

body = ‘<html><body><span>good</span></body></html>‘

Selector(text=body).xpath(‘//span/text()‘).extract()

註意到我們要找的內容在<span>標簽裏面,可以用//span/來定位,而我們要獲取標簽裏面包裹的內容,用text()來獲取。

而前面.xpath() 及 .css() 方法返回的是一個類 SelectorList 的實例, 它是一個新選擇器的列表。需要調用extract()最後成功獲取good。

response.xpath(‘//title/text()‘).extract() 等價於 response.css(‘title::text‘).extract()

當源碼是這種情況的時候,

<a href=‘image3.html‘>Name: My image 3 <
br /><img src=‘image3_thumb.jpg‘ /></a>

xpath用法:

>>> response.xpath(//a[contains(@href, "image")][email protected]).extract()
[uimage1.html,
 uimage2.html,
 uimage3.html,
 uimage4.html,
 uimage5.html]

contains代表href裏面包含”image”的內容,[email protected]

css用法:

>>> response.css(a[href*=image]::attr(href)).extract()
[uimage1.html,
 uimage2.html,
 uimage3.html,
 uimage4.html,
 uimage5.html]

當我們像這樣把數據都挑出來以後

    def parse(self, response):
        for sel in response.xpath(//ul/li):
            item = DmozItem()
            item[title] = sel.xpath(a/text()).extract()
            item[link] = sel.xpath([email protected]).extract()
            item[desc] = sel.xpath(text()).extract()
            yield item

最後獲取數據需要用 yield

yield是一個生成器,他可以記錄調用之前的數據信息(各個參數的值),和位置信息(在框架中跳轉以後依然能回來執行),而上次調用的所有局部變量都保持不變。

可以參考:Python yield 用法 http://www.pythonclub.org/python-basic/yield

保存爬取到的數據

scrapy crawl dmoz -o items.json

該命令將采用 JSON 格式對爬取的數據進行序列化,生成 items.json 文件。

在類似本篇教程裏這樣小規模的項目中,這種存儲方式已經足夠。 如果需要對爬取到的item做更多更為復雜的操作,您可以編寫 Item Pipeline 。

scrapy基本使用(二)