Scrapy - 使用xPathSelector提取嵌套的'img src'

Twh*_*ler 6 python xpath scrapy web-scraping

我对使用Scrapy或python相对较新.我想从几个不同的链接中提取,我在使用HTMLXPathSelector表达式(语法)时遇到问题.我已经查看了大量文档以了解正确的语法,但尚未找到解决方案.

这是我试图从中提取'img src'的链接示例:

页面我正在尝试从中提取img src url

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector

class GeekSpider(BaseSpider):
    name = "geekS"
    allowed_domains = ["geek.com"]
    start_urls = ["http://www.geek.com/articles/gadgets/kindle-fire-hd-8-9-on-sale-for-50-off-today-only-20121210/"]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        imgurl = hxs.select("//div[@class='article']//a/img/@src").extract()
        return imgurl
Run Code Online (Sandbox Code Playgroud)

我想我已经找到了x.select语句的语法,但是,因为我是这个语法/方法的新手,我不确定.

这是我的items.py文件,基本上遵循scrapy教程:

from scrapy.item import Item, Field

class GeekItem(Item):
    imgsrc = Field()
Run Code Online (Sandbox Code Playgroud)

澄清一下:我要做的是提取页面上的img src url.我不需要提取我已经想到的所有图像src(更容易).

我只是想缩小范围,只提取img src的特定网址.(我将在本网站的多个页面上使用此功能)

任何帮助是极大的赞赏!

编辑 - 更新的代码我在geek = geek()中遇到了一些语法错误所以我稍微改了一下,希望更容易理解和运行

Tal*_*lin 3

我相信你的 xpath 表达式应该更像这样。我在另一个页面(亚马逊运输中心文章)上测试了它,它返回了所有十个可点击的图像。

geek['imgsrc'] = x.select("//div[@class='article']//a/img/@src").extract()
Run Code Online (Sandbox Code Playgroud)

要解决您的其他问题,您需要将 GeekItem 导入到 GeekSpider 代码中。

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from geekspider.items import GeekItem # I'm guessing the name of your project here

class GeekSpider(BaseSpider):
    name = "geekS"
    allowed_domains = ["geek.com"]
    start_urls = ["http://www.geek.com/articles/gadgets/kindle-fire-hd-8-9-on-sale-for-50-off-today-only-20121210/"]

    def parse(self, response):
        item = GeekItem()
        hxs = HtmlXPathSelector(response)
        item['imgsrc'] = hxs.select("//div[@class='article']//a/img/@src").extract()
        return item
Run Code Online (Sandbox Code Playgroud)