2016-06-06 1 views
1

Я пытаюсь скрести сайт и содержание HTML выглядит примерно такКак перебирать узлы в Scrapy с помощью питона

<div class="panel-heading" role="tab" id="heading727654"> 
      <h4 class="panel-title"> 
       <a class="collapsed" data-toggle="collapse" data-parent="#accordion" href="#collapse727654" aria-expanded="false" aria-controls="collapse727654"> 
        <div class="product-name"> 
         <span class="product-title"> 
          Aubrey<br><i>AGE DEFYING THERAPY CLEANSER 3.4 OZ</i> 
         </span> 
        </div> 
        <div class="product-price"> 
         <span> 
          $10.99/3.40 OZ 
         </span> 
       </a> 
      </h4> 
</div> 
<div class="panel-heading" role="tab" id="heading727655"> 
      <h4 class="panel-title"> 
       <a class="collapsed" data-toggle="collapse" data-parent="#accordion" href="#collapse727655" aria-expanded="false" aria-controls="collapse727654"> 
        <div class="product-name"> 
         <span class="product-title"> 
          Aubrey<br><i>AGE DEFYING THERAPY LIQUID</i> 
         </span> 
        </div> 
        <div class="product-price"> 
         <span> 
          $12.99/4.40 OZ 
         </span> 
       </a> 
      </h4> 
</div> 

Мой питон фрагмент кода, чтобы извлечь это что-то вроде

def parse(self, response): 
     filename = response.url.split("/")[-2] + '.html' 
     with open(filename, 'wb') as f: 
      for node in response.xpath('//div[re:test(@class, "panel-heading")]'): 
       print node.xpath('//span[re:test(@class, "product-title")]//text()').extract() 
       print node.xpath('//span[re:test(@class, "product-price")]//text()').extract() 

Когда я запускаю вышеуказанный код scrapy в Python, я не получаю ожидаемый результат, то же содержимое повторяется 100 раз. Может кто-то помочь мне с этим?

+0

Было бы проще, если бы вы указали нам URL-адрес, который вы пытаетесь очистить, чтобы мы могли сделать тест. Это возможно? –

+0

Да, конечно. https://www.naturalgrocers.com/products/departments/body-care/?mg=1&product_name=&product_sort_by=title_asc&store_location_id=U089&department-product-search=&department_link=BODY+CARE – goutam

+0

@goutam, которые значения из HTML вы ищете ? –

ответ

1

Вам необходимо указать префиксы на ваши внутренние выражения XPath, чтобы они работали в контексте node. В противном случае поиск начинается с корня дерева:

def parse(self, response): 
    filename = response.url.split("/")[-2] + '.html' 
    with open(filename, 'wb') as f: 
     for node in response.xpath('//div[re:test(@class, "panel-heading")]'): 
      print node.xpath('.//span[re:test(@class, "product-title")]//text()').extract() 
      print node.xpath('.//span[re:test(@class, "product-price")]//text()').extract() 
Смежные вопросы