2015-12-08 42 views
1

我已经开始学习Python,,我很喜欢它。我一直在寻找不同的图书馆,而不是什么。所以我偶然发现Scrapy,并认为我会试一试。我想从daylerees配色方案(从github)获得所有链接并将它们转储到某处以便快速访问。Python scrapy没有做任何事情

所以我这样做:

import scrapy 


class ThemeItem(scrapy.Item): 
    name = scrapy.Field() 
    link = scrapy.Field() 


class ThemeSpider(scrapy.Spider): 
    name = 'themespider' 
    start_urls = ['https://github.com/daylerees/colour-schemes/tree/master/jetbrains'] 

    def parse(self, response): 
     for sel in response.xpath('//a[@class="js-directory-link"]'): 
      url = ThemeItem() 
      url['name'] = sel.xpath('text()') 
      url['link'] = sel.xpath('@href') 

      yield url 

而且这还不是在所有输出任何东西。任何指导将不胜感激。


我跑这样的: scrapy runspider spider.py

+0

您的脚本不输出任何内容,因为它没有任何操作。您正在导入一个库,然后定义两个类。可以说,没有'程序'正在执行,因此没有输出。 –

+1

对不起,忘了提及 - 我正在从控制台执行scrapy runspider spider.py。 –

+1

@ChrisSprague我很确定OP是通过'scrapy' cli运行的。 – alecxe

回答

1

包含js-directory-link类的元素也有其他类,例如:

<a href="/daylerees/colour-schemes/tree/master/jetbrains/contrast" class="js-directory-link js-navigation-open" id="c8fd07f040a8f2dc85f5b2d3804ea3db-6b332f6820ec47d7ade641dbf72108b025b10440" title="contrast">contrast</a> 

您需要使用的部分类属性匹配通过:

//a[contains(@class, "js-directory-link")] 

或者,你可以使用CSS selectors

for sel in response.css('a.js-directory-link'): 

虽然我真的会考虑使用github API代替。

+0

啊,这很有道理!我把它改成了CSS选择器,并输出:'{'link':[],' name':[]}'。我想我会使用github的API代替。谢谢! –

+0

@SuchMuchCode是的,你有选择器打印。调用'extract()'来获得真实值,例如'sel.xpath( '文本()')。提取物()'。谢谢。 – alecxe