Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。 具体开发流程如下:
一、确定待抓取网站
当您需要从某个网站中获取信息,但该网站未提供API或能通过程序获取信息的机制时, Scrapy可以助你一臂之力。
二、定义要抓取的数据
定义我们需要爬取的数据。在Scrapy中, 这是通过 Scrapy Items 来完成的。(在本例子中为种子文件)
我们定义的Item:
View Code1 # Define here the models for your scraped items 2 # 3 # See documentation in: 4 # http://doc.scrapy.org/topics/items.html 5 6 from scrapy.item import Item, Field 7 8 class TutorialItem(Item): 9 # define the fields for your item here like: 10 # name = Field() 11 title=Field() 12 link=Field() 13 desc=Field() 14 15 16
三、编写抓取数据的Spiders(核心)
定义种子初始URL、针对后续链接的规则以及从页面中提取数据的规则。
View Code1 #coding=utf-8 2 3 from scrapy.spider import BaseSpider 4 from scrapy.selector import HtmlXPathSelector 5 from tutorial.items import TutorialItem 6 7 class DmozSpider(BaseSpider): 8 name = "dmoz" 9 allowed_domains = ["dmoz.org"] 10 start_urls = [ 11 "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", 12 "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/" 13 ] 14 15 def parse(self, response): 16 # filename = response.url.split("/")[-2] 17 # # open(filename, 'wb').write(response.body) 18 # with open(filename,'wb') as f: 19 # f.write(response.body) 20 hxs = HtmlXPathSelector(response) 21 sites = hxs.select('//ul/li') 22 items = [] 23 24 for site in sites: 25 item = TutorialItem() 26 item['title'] = site.select('a/text()').extract() 27 item['link'] = site.select('a/@href').extract() 28 item['desc'] = site.select('text()').extract() 29 items.append(item) 30 31 return items 32 33 34
四、执行Spider,保存数据
scrapy crawl dmoz -o scraped_data.json