2014-09-10 62 views
0

我與馬項目合作XYZ需要幫助理解程序

的輸出和我被困在從源中提取文本

<a href="/gifts" class="title" data-tracking-id="mdd-heading">gifts</a> 

我想extrack將href爲內容

我想這

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 
from XYZ.items import XYZ 
class MySpider(BaseSpider): 
    name = "main" 
    allowed_domains = ["XYZ"] 
    start_urls = ["XYZ"] 
    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     titles = hxs.select("//a[@data-tracking-id='mdd-heading']") 
     items = [] 
     for titles in titles: 
      item = XYZ() 
      item ["title"] = titles.select("text()").extract() 
      item ["link"] = titles.select("@href").extract() 
      items.append(item) 
      print "www.xyz.com"+str(item["link"]) 
     return items 

output

www.xyz.com[u'/gifts'] 

我期待爲

www.xyz.com/gifts 

我做了錯誤的輸出....?

+1

'item ['link']'顯然是一個列表;改用其第一個元素。 – jonrsharpe 2014-09-10 09:21:51

+0

謝謝@jonrsharpe – 2014-09-10 09:23:24

回答

1

根據用於Selector's extract()的文檔:

提取物()

序列化和返回匹配的節點爲Unicode 字符串列表。編碼百分比的內容未加引號。

因此,extract()返回一個列表,你需要它的第一個項目。使用item['link'][0]

另外,還有一些在代碼中的其他問題:

  • for titles in titles循環沒有意義,你需要一個單獨的循環變量
  • HtmlXPathSelector已過時,使用Selector
  • 使用urljoin()加盟url的部分

下面是修正和其他改進的完整代碼:

from urlparse import urljoin 

from scrapy.spider import BaseSpider 
from scrapy.selector import Selector 

from XYZ.items import XYZ 


class MySpider(BaseSpider): 
    name = "main" 
    allowed_domains = ["XYZ"] 
    start_urls = ["XYZ"] 

    def parse(self, response): 
     titles = response.xpath("//a[@data-tracking-id='mdd-heading']") 
     for title in titles: 
      item = XYZ() 
      item ["title"] = title.xpath("text()").extract()[0] 
      item ["link"] = title.xpath("@href").extract()[0] 
      print urljoin("www.xyz.com", item["link"]) 

      yield item