使用XPath对网页进行加扰

时间:2014-07-04 21:09:01

标签: json xpath web-scraping 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>

        ...

我使用了报纸,但因为我是新手而且我不明白我错在哪里。我没有得到预期的结果

这是代码

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 个答案:

答案 0 :(得分:1)

如果要将项目输出为json,请使用scrapy crawl spider -t json -o filename.json

此外,您的xpath应该是这样的:

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