2016-10-10 26 views
0

我是菜鸟,想用scrapy框架抢东西,但我有麻烦:如何在使用XPath和CSS选择器功能

HTML中:

<ul class="tip" id="tip1"> 
    <li id="tip1_0"> 
     <a href="http://***" title="***" target="_self">*** 
     </a> 
    </li> 
    <li id="tip1_1"> 
     <a href="http://***" title="***" target="_self">*** 
     </a> 
    </li> 
    <li id="tip1_2"> 
     <a href="http://***" title="***" target="_self">*** 
     </a> 
    </li> 
</ul> 

我用:

f = response.xpath("//*[@id='tip1']//li/a/@href | //*[@id='tip1']//li/a/@title").extract() 

当我得到的f是一个列表,我会改变列表(F)与dict(NAME0 = F [0],value0 = F [1],NAME1 = F [2],值1 = [f3],依此类推)。有什么办法更容易?

的Html B:

<div class="info"> 
    <a target="_blank" href="***" title="***"> 
    </a> 
</div> 
<div class="info"> 
    <a target="_blank" href="***" title="***"> 
    </a> 
</div> 
<div class="info"> 
    <a target="_blank" href="***" title="***"> 
    </a> 
</div> 

在这种情况下:

file = response.xpath('//div[@class="info"]') 
for line in file: 
    f = line.xpath('/a/@href').extract() 
    d = line.xpath('/a/@title').extract() 

但是,它不工作,只是返回 'F = []' 和 'd = []',那么,我很困惑,我该如何解决这个问题?非常感谢。

回答

1

你可以通过预先点取得了你的内心表达的具体情况的:

f = line.xpath('./a/@href').extract() 
d = line.xpath('./a/@title').extract() 

或者,指向你的外在表达a并得到@href@title

file = response.xpath('//div[@class="info"]/a') 
for line in file: 
    f = line.xpath('@href').extract_first() 
    d = line.xpath('@title').extract_first() 

还要注意使用extract_first()方法。