【问题标题】:Is this Sprite SVG possible to scrape?这个 Sprite SVG 可以刮吗?
【发布时间】:2020-10-27 05:08:42
【问题描述】:

我可以用标准的 Scrapy 刮这个还是我需要使用 Selenium?

html 是:

<td class="example"><sprite-svg name="EXAMPLE2"><svg><use 
xlink:href="/spritemap/1_0_30#sprite-EXAMPLE2"></use></svg></sprite-svg></td> 

不知何故,我需要值“EXAMPLE2”。

在浏览器中工作的 xpath 是 //td[@class='example']//*[local-name() = 'svg']

当我将它放入 scrapy 时,我使用以下代码,但出现 XPATH 错误。

'example' : div.xpath(".//td[@class='example']//*[local-name() = 'svg'] 
()").extract()

任何想法如何刮掉它?

【问题讨论】:

  • xpath 开头有一个点。你也可以分享网站页面网址吗??
  • 您在此处链接的页面,在控制台中 $x("//td[@class='example']") 返回空数组。您可以检查一下吗?
  • 如何判断哪一只是灰狗?

标签: python svg web-scraping scrapy sprite


【解决方案1】:

查看表格,每个 svg sprite 都在一个类 'rug_X' 下

类似

import scrapy


class RaceSpider(scrapy.Spider):
    name = 'race'
    allowed_domains = ['thedogs.com.au']
    start_urls = ['https://www.thedogs.com.au/racing/gawler/2020-07-07/1/the-bunyip-maiden-stake-pr2-division1']
    item = {}
    def parse(self, response):
        row = response.xpath('//tbody/tr')

        dog = a.xpath('.//td[@class="table__cell--tight race-runners__name"]/div/a/text()').get()
        
        number = a.xpath('.//td[@class="table__cell--tight race-runners__box"]/sprite-svg/@name').get() 
      
        cleaned_num = int(number.replace('rug_',''))
        grade = a.xpath('.//td[@class="race-runners__grade"]/text()').get()

        item = {'grade':grade, 'greyhound':dog,'rug':cleaned_num}
        yield item
         

您还可以使用带有自定义函数的项目加载器来清理您获得的响应。

【讨论】:

  • 感谢您的回复,我已经用我的代码更新了我的帖子。当我将它添加到我的代码中时,您的代码给了我一个列表,我只想要每个灰狗的一个值。
  • 我已经编辑了代码,为您提供每只灰狗以及图像中的数字。这更清楚了吗?
  • 太完美了!非常感谢。
【解决方案2】:

是的。你可以用scrapy来做:

 response.xpath("//td[@class='table__cell--tight race-runners__box']/sprite-svg/@name").getall()

工作的scrapy代码:

import scrapy

class Test(scrapy.Spider):
    name = 'Test'
    start_urls = [
        'https://www.thedogs.com.au/racing/gawler/2020-07-07/1/the-bunyip-maiden-stake-pr2-division1']

def parse(self, response):
    return {"nameList": response.xpath("//td[@class='table__cell--tight race-runners__box']/sprite-svg/@name").getall()}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-14
    • 2013-10-18
    • 1970-01-01
    • 2021-03-05
    • 2011-09-13
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    相关资源
    最近更新 更多