当前位置: 首页 > 知识库问答 >
问题:

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

邰博远
2023-03-14

我对使用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

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

下面是我的items.py文件,基本上遵循了这方面的教程:

from scrapy.item import Item, Field

class GeekItem(Item):
    imgsrc = Field()

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

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

非常感谢任何帮助!

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

共有1个答案

施超
2023-03-14

我相信您的xpath表达式应该更像这样。我在另一个页面(Amazon shipping center的文章)上测试了它,它返回了所有十个可点击的图片。

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
 类似资料:
  • 问题内容: 我正在尝试从数据JSON获取值。我已经成功遍历了JSON数据,几乎满足了我的需求! 在Python中运行以下命令: 给我这个: 我只想获得价值。这是关键。 如何进一步执行命令以仅返回值? 问题答案: 这是完整的输出吗?这本字典包含带有嵌套字典的列表,因此您应该这样处理。假设它被称为: 您的第一个地址是对象,然后是字典中的键,列表中的索引以及该字典的键: 输出: 编辑:根据您所得到的然后

  • 我正在编写一些使用放心及其静态编程语言扩展的测试来测试一些简单的Spring MVCendpoint。我正在尝试了解如何提取值。 一个endpoint返回<code>BookDetailsView < code>BookDetailsView是一个非常简单的Kotlin数据类,只有一个字段: 对于单个对象终结点,我有: 这与预期的一样,但尝试对<code>页应用相同的技术 我尝试了各种排列,如下面

  • 我正在尝试使用Scrapy获取ID为的页面上图像的URL。target元素具有以下HTML代码 在Chrome浏览器中运行 正确抓取URL 问题:但是在Scrapy中使用以下CSS选择器, 而且 而且 给了我们 使用也返回了同样不正确的URL。 为什么Scrapy会抓取不同的SRC值?

  • 我对web刮刮、scrapy和Python都是新手。我试着从这个网站页面刮数据。 我想提取页面页脚中给出的电子邮件id:info@bikramyogasg.com,并尝试使用两个XPath在scrapy Spider中提取: 相对:id(“gkfooternav”)/div/p/span/a/text() 绝对:/html/body/div[4]/div1/div/div/div/p/span/a

  • 问题内容: 因此,给定对象的JSON数组: 我想从nested中提取键/值的子集,同时保持外部对象的其他属性不变,产生如下结果: 即删除除和以外的所有键。 我确信必须有一种使用jq实现此目标的合理简便的方法。帮助表示赞赏。 问题答案: 您可以使用以下过滤器: 这会映射数组中过滤对象的每个项目,仅包括和属性。

  • 我被困在将嵌套JS与宇宙数据库核心SQL API集成上。我知道有一个用于 Cosmos DB 的模块(https://github.com/nestjs/azure-database),但我需要数据架构来支持嵌套的 json,如下所示: 我认为@nestjs/azure-database不支持这一点(或者我可能错了),因为当我检查他们的示例和quickstart时,没有这样的json模式的示例。