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

Posted

技术标签:

【中文标题】Scrapy - 使用 xPathSelector 提取嵌套的“img src”【英文标题】:Scrapy - extract nested 'img src' using xPathSelector 【发布时间】:2012-12-03 01:04:00 【问题描述】:

我对使用 Scrapy 或 python 比较陌生。我希望从几个不同的链接中提取,但我在使用 htmlXPathSelector 表达式(语法)时遇到问题。我查看了大量文档以了解正确的语法,但还没有找到解决方案。

这是我尝试从中提取“img src”的链接示例:

Page I am trying to extract the img src url from

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

我想我已经弄清楚了 x.select 语句的语法,但是由于我不熟悉这种语法/方法,所以我不确定。

这是我的 items.py 文件,基本上是按照scrapy教程进行的:

from scrapy.item import Item, Field

class GeekItem(Item):
    imgsrc = Field()

澄清一下:我要做的是提取页面上的 img src url。我不需要提取我已经弄清楚的所有图像 src(容易得多)。

我只是想缩小范围,只提取 img src 的特定 url。 (我将在本网站的多个页面中使用它)

非常感谢任何帮助!

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

【问题讨论】:

所以您只想要可点击链接的图片(即“kindle-fire-hd.jpg”)? 是的,完全正确。我什至不想返回图像本身,只是图像的 url 以便我可以存储它。 为避免混淆,请更新发布的第一个蜘蛛代码并删除第二个。 :) 感谢您的提示,不确定删除旧代码或保留它是否更令人困惑 【参考方案1】:

我相信你的 xpath 表达式应该更像这样。我在另一个页面 (the Amazon shipping center article) 上对其进行了测试,它返回了所有十张可点击的图片。

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

要解决您的其他问题,您需要将 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

【讨论】:

谢谢!自从提出这个问题以来,由于一些语法错误,我稍微改变了蜘蛛。我附上了上面的更新代码。我不再收到错误,但是在检查 scraped_data.json 时,所有返回的都是 [ 符号。有什么想法吗? 我还附上了我的 items.py 文件,我认为它没有任何问题(因为我几乎完全按照 scrapy 教程进行操作),但为了节省可能的时间和混乱,我将其附在上面.我确实注意到我收到一条错误消息,上面写着“蜘蛛必须返回 Request、BaseItem 或 None”。感谢您的帮助! 感谢您的所有帮助,解决了我遇到的困惑和问题。现在我只需要让它跨从我的数据库中提取的多个 url 工作,并将其通过管道传输回我的数据库。应该很有趣。再次感谢!

以上是关于Scrapy - 使用 xPathSelector 提取嵌套的“img src”的主要内容,如果未能解决你的问题,请参考以下文章

01_爬虫基础知识回顾

第三章:爬虫基础知识回顾

python分布式爬虫搭建开发环境

ElementTree XPath - 根据属性选择元素

scrapy的使用

Python爬虫 scrapy -- scrapy 日志信息和日志等级scrapy shell的使用scrapy post请求