Скремблирование веб-страницы с помощью XPath

#json #xpath #web-scraping #scrapy

#json #xpath #очистка веб-страницы #scrapy

Вопрос:

Я использую синтаксис XPath и Scampy для скремблирования веб-страницы со следующей структурой

 <ul id="brandList">

        <li class="no-mrg">
            <a href="link">
                <span class="single-logo"><img src="image.png"/></span>
                <span class="single-brand">BRAND1</span>
            </a>
         </li>

        <li class="no-mrg">
            <a href="link2">
                <span class="single-logo"><img src="image2.png"/></span>
                <span class="single-brand">BRAND2</span>
            </a>
         </li>

        ...
  

Я использую scrampy, но поскольку я новичок, и я не понимаю, где я ошибаюсь. Я не получаю ожидаемого результата

вот код

 def parse(self, response):
        for sel in response.xpath("//li[@class='no-mrg']"):
            brand = BrandItem()
            brand['brand'] = sel.xpath("span[@class='single-brand']/text()").extract()
            brand['logo'] = sel.xpath("img/@src").extract()
            yield brand
  

Я использую эту функцию для получения объекта json, но я не получаю ожидаемый объект.
Я бы получил объект json, имеющий следующую структуру:

 [
{brand: 'brand1', logo: 'logo'},
]
  

Я почти уверен, что неправильно использую синтаксис XPath

Ответ №1:

Если вы хотите выводить элементы в формате json, используйте scrapy crawl spider -t json -o filename.json .

Также ваши xpaths должны быть такими:

 def parse(self, response):
    for sel in Selector(response).xpath("//li[@class='no-mrg']/a"):
        brand = BrandItem()
        brand['brand'] = sel.xpath("span[@class='single-brand']/text()").extract()
        brand['logo'] = sel.xpath("span[@class='single-logo']/img/@src").extract()
        yield brand