2016-09-28 59 views
-2

我是新来使用python scrapy,我的scrapy版本是1.1.3。我想在上获得this part的链接列表。我应该如何修改我的代码?如何修改我的代码来刮取这些链接?

import scrapy 

class LinkSpider(scrapy.Spider): 
    name = "links" 
    start_urls = [ 
     'https://www.wikipedia.org/', 
    ] 

    def parse(self, response): 
     for link in response.xpath('//div/ul/li/a'): 
      yield{ 
       'link': link.extract() 
      } 

以上是我的代码在我的项目文件夹/蜘蛛/ spiders.py

我得到的是

[ 
{"link": "<a href=\"//de.wikipedia.org/\" lang=\"de\">Deutsch</a>"}, 
{"link": "<a href=\"//en.wikipedia.org/\" lang=\"en\" title=\"English\">English</a>"}, 
{"link": "<a href=\"//es.wikipedia.org/\" lang=\"es\">Espa\u00f1ol</a>"}, 
{"link": "<a href=\"//fr.wikipedia.org/\" lang=\"fr\">Fran\u00e7ais</a>"}, 
{"link": "<a href=\"//it.wikipedia.org/\" lang=\"it\">Italiano</a>"}, 
{"link": "<a href=\"//nl.wikipedia.org/\" lang=\"nl\">Nederlands</a>"}, 
{"link": "<a href=\"//ja.wikipedia.org/\" lang=\"ja\" title=\"Nihongo\">\u65e5\u672c\u8a9e</a>"}, 
{"link": "<a href=\"//pl.wikipedia.org/\" lang=\"pl\">Polski</a>"}, 
{"link": "<a href=\"//ru.wikipedia.org/\" lang=\"ru\" title=\"Russkiy\">\u0420\u0443\u0441\u0441\u043a\u0438\u0439</a>"}, 
{"link": "<a href=\"//ceb.wikipedia.org/\" lang=\"ceb\">Sinugboanong Binisaya</a>"} 
] 

,我希望类似的列表只包含像“链接// de.wikipedia.org/”。

+0

您可以提高通过解释你的代码做什么是错的,你期望它做什么的问题,。 –

回答

0

您需要修改XPath查询获取属性没有标签

import scrapy 

class LinkSpider(scrapy.Spider): 
    name = "links" 
    start_urls = [ 
     'https://www.wikipedia.org/', 
    ] 

    def parse(self, response): 
     for link in response.xpath('//div/ul/li/a/@href'): 
      yield{ 
       'link': link.extract() 
      } 
0

你缺少一些事情的价值,

  • 您需要添加属性@href得到值
  • 您的href值在第一个索引上,您需要添加索引号。

    import scrapy 
    class LinkSpider(scrapy.Spider): 
        name = "links" 
        start_urls = ['https://www.wikipedia.org/', ] 
    
        def parse(self, response): 
         for link in response.xpath('//div/ul/li/a/@href'): 
          yield{'link': link.extract()[0]}