龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > python编程 >

零基础写python爬虫之使用Scrapy框架编写爬虫(4)

时间:2014-11-08 02:36来源:网络整理 作者:网络 点击:
分享到:
复制代码 代码如下: In [1]: sel.xpath('//title') Out[1]: [Selector xpath='//title' data=u'titleOpen Directory - Computers: Progr'] In [2]: sel.xpath('//title').extract() Out[2]: [u'titleOpen Di

复制代码 代码如下:

In [1]: sel.xpath('//title') 
Out[1]: [<Selector xpath='//title' data=u'<title>Open Directory - Computers: Progr'>] 
 
In [2]: sel.xpath('//title').extract() 
Out[2]: [u'<title>Open Directory - Computers: Programming: Languages: Python: Books</title>'] 
 
In [3]: sel.xpath('//title/text()') 
Out[3]: [<Selector xpath='//title/text()' data=u'Open Directory - Computers: Programming:'>] 
 
In [4]: sel.xpath('//title/text()').extract() 
Out[4]: [u'Open Directory - Computers: Programming: Languages: Python: Books'] 
 
In [5]: sel.xpath('//title/text()').re('(\w+):') 
Out[5]: [u'Computers', u'Programming', u'Languages', u'Python'] 

当然title这个标签对我们来说没有太多的价值,下面我们就来真正抓取一些有意义的东西。
使用火狐的审查元素我们可以清楚地看到,我们需要的东西如下:

我们可以用如下代码来抓取这个<li>标签:

复制代码 代码如下:

sel.xpath('//ul/li') 

从<li>标签中,可以这样获取网站的描述:

复制代码 代码如下:

sel.xpath('//ul/li/text()').extract() 

可以这样获取网站的标题:

复制代码 代码如下:

sel.xpath('//ul/li/a/text()').extract() 

可以这样获取网站的超链接:

复制代码 代码如下:

当然,前面的这些例子是直接获取属性的方法。
我们注意到xpath返回了一个对象列表,
那么我们也可以直接调用这个列表中对象的属性挖掘更深的节点
(参考:Nesting selectors andWorking with relative XPaths in the Selectors):
sites = sel.xpath('//ul/li')
for site in sites:
    title = site.xpath('a/text()').extract()
    link = site.xpath('a/@href').extract()
    desc = site.xpath('text()').extract()
    print title, link, desc

3.4xpath实战
我们用shell做了这么久的实战,最后我们可以把前面学习到的内容应用到dmoz_spider这个爬虫中。
在原爬虫的parse函数中做如下修改:

复制代码 代码如下:

from scrapy.spider import Spider 
from scrapy.selector import Selector 
 
class DmozSpider(Spider): 
    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): 
        sel = Selector(response) 
        sites = sel.xpath('//ul/li') 
        for site in sites: 
            title = site.xpath('a/text()').extract() 
            link = site.xpath('a/@href').extract() 
            desc = site.xpath('text()').extract() 
            print title 

精彩图集

赞助商链接