Scrapy Xpath: Как мне избежать получения одинакового значения на одной странице? - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь получить значения из html ниже, как показано ниже, с помощью Scrapy.

<div class="product_sec">
<h4><span class="">
<a href="/sampleindex.html" class="detail">Product1</a>
</span></h4>

<h4><span class="">
<a href="/sampleindex.html" class="detail">Product2</a>
</span></h4>
---Continues to Product 50---
</div>

Всего на странице 50 товаров.

Мне нужен списоктекст Product1, Product2, но когда я запускаю приведенный ниже код,

def parse(self, response):
    for post in response.xpath('//*[@class="product_sec"]'):
        yield ProductItem(
            title = response.xpath('//a[@class="detail"]/text()').get()
        )

Он дает мне список Product1 x 50 раз вместо Product1, Product2 ... Я попытался установить правильное значение, изменивXpath но это всегда дает мне один и тот же результат. Похоже, это предложение «всегда» принимает первое значение. Как мне решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 23 октября 2019

Вам нужно использовать относительно Выражение Xpath:

def parse(self, response):
    for post in response.xpath('//*[@class="product_sec"]'):
        yield ProductItem(
            title = post.xpath('.//a[@class="detail"]/text()').get()
        )
2 голосов
/ 23 октября 2019

замените response.xpath на объект, который вы пытаетесь зациклить

def parse(self, response):
    for post in response.xpath('//*[@class="product_sec"]'):
        yield ProductItem(
            title = post.xpath('a[@class="detail"]/text()').extract()
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...