#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