日期:2014-05-16  浏览次数:20445 次

Scrapy爬虫笔记【8-Scrapy核心操作+爬豆瓣图片+数据库链接】

本博客地址【http://blog.csdn.net/xiantian7】

版权所有,违者必究

豆瓣图片下载

scrapy startproject  doubanImage

建立工程, pretty easy huh?

scrapy shell urlLink

及时工程中不添加任何代码,命令行也可以这么使用,这是用来模拟爬取的效果

出现结果

当然,测试爬取的效果,就是针对response 和sel两个结果来做处理,主要是sel,在sel的基础上使用xpath等过滤方法。基本的xpath用法前面介绍过

现在强调及几个重要的用法

1.sel是一个selector

2. sel.xpath(),之后得到的是一个selectorList,就是一堆的selector,这样就可以更快的获取我们需要的数据(使用sel.select()是一样的效果)

3、要取出节点下面的文本数据,需要使用sel.xpath().extract() 方法 或者 sel.select().extract()


hxs.select(‘//ul/li/div/a/@href’).extract()

选取了xpath中herf元素中的内容,<a href="被选取的内容"><img src="link"></img></a>

当然如果要选取link,应该这么写 hxs.select(‘//ul/li/div/a/img/@src').extract()


这么写可以得到图片的地址sel.select("//ul/li/div[@class='cover']/a/@href").extract()


而且对比一下就会发现,如果缩略图的URL是:

http://img3.douban.com/view/photo/thumb/public/p2151696782.jpg

那么这个图片的URL就是

http://img3.douban.com/view/photo/photo/public/p2151696782.jpg

然后我们点击图片左下角的查看原图,就会发现,图片的链接是:

http://img3.douban.com/view/photo/raw/public/p2151696782.jpg

这样只要简单的做一下字符串替换,就可以得到原图的link了


那么得到的spider文件应该是这样的

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
class DouBanImage(BaseSpider):
   name = "douban"
   allowed_domains = ["douban.com"]
   filename = 'douban.txt'
   f = open(filename, 'wb')
   start_urls = ["http://movie.douban.com/subject/10581289/photos?type=S"]

   def parse(self, response):
       hxs = HtmlXPathSelector(response)
       sites = hxs.select('//ul/li/div/a/img/@src').extract()
       for site in sites:
           site = site.replace('thumb','raw')
           self.f.write(site)
           self.f.write('\r\n')

我们把链接地址全部就写入一个文件

观察每一页的地址,可以发现。。。。很有规律性的。。。start=0,40,80,120...于是乎,一个简单无比的代码就出来了

某一个页面分析完,不一定像我这种只想要图片地址的,比如说可能有人还想要每张图片的评论,所以呢,就有了Item这个文件,对于编辑items.py这个文件,每添加一个项,就是用XXX=Filed()就可以了。