2014-02-17 3 views
2

Как я могу извлечь контент из комментариев с помощью scrappy?Scrapy: Извлечение прокомментированного (скрытого) контента

Например, как извлечь «Желтый» в следующем примере:

<div class="fruit"> 
    <div class="infos"> 
     <h2 class="Name">Banana</h2> 
     <span class="edible">Edible: Yes</span> 
    </div> 
    <!-- 
    <p class="color">Yellow</p> 
    --> 
</div> 

ответ

4

Вы можете использовать выражение XPath, как //comment() получить комментарий содержание, а затем разобрать, что содержание после того, раздели теги комментариев ,

Пример SCRAPY оболочка сессия:

[email protected]:~$ scrapy shell 
... 
In [1]: doc = """<div class="fruit"> 
    ...:  <div class="infos"> 
    ...:   <h2 class="Name">Banana</h2> 
    ...:   <span class="edible">Edible: Yes</span> 
    ...:  </div> 
    ...:  <!-- 
    ...:  <p class="color">Yellow</p> 
    ...:  --> 
    ...: </div>""" 

In [2]: from scrapy.selector import Selector 

In [4]: selector = Selector(text=doc, type="html") 

In [5]: import re 

In [6]: regex = re.compile(r'<!--(.*)-->', re.DOTALL) 

In [7]: selector.xpath('//comment()').re(regex) 
Out[7]: [u'\n <p class="color">Yellow</p>\n '] 

In [8]: comment = selector.xpath('//comment()').re(regex)[0] 

In [9]: commentsel = Selector(text=comment, type="html") 

In [10]: commentsel.css('p.color') 
Out[10]: [<Selector xpath=u"descendant-or-self::p[@class and contains(concat(' ', normalize-space(@class), ' '), ' color ')]" data=u'<p class="color">Yellow</p>'>] 

In [11]: commentsel.css('p.color').extract() 
Out[11]: [u'<p class="color">Yellow</p>'] 

In [12]: commentsel.css('p.color::text').extract() 
Out[12]: [u'Yellow'] 
+0

В строке, она работает. Но с HTML-страницы это не так. 'Line [8]' variable 'comment = []' Как будто комментарии не были даже «замечены» методом scrapy. – Matt

+0

У вас есть пример URL? –

+0

Уверен: http://www.vietnamworks.com/it-software-jobs-i35-en с комментарием '' – Matt

0

Прежде всего, используйте ниже XPath, чтобы получить все комментарии со страницы.

data = response.xpath('//comment()').extract() 

Теперь, используя любую идентификационную информацию о значении ключа, ваш смысл имеет смысл.

up_data = [] 
for d in data: 
    if 'key' in d: 
     up_data.append(d) 

определить,

html_template = '<html><body>%s</body></html>' 
for up_d in up_data: 
    up_d = html_template % up_d.replace('<!--','').replace('-->', '') 
    sel = Selector(text=up_d) 
    sel.xpath('//div[@class="table_outer_container"]') 

    // DO what you want 
Смежные вопросы