解析给出 xa0 而不是 6°C

Parsing gives xa0 instead of 6°C

我尝试在以下网站上使用 scrapy spider 进行抓取

scrapy genspider netweather_belfast https://www.netweather.tv/weather-forecasts/uk/10-day/2521~Belfast

当我检查显示温度的文本元素时,我在 Xpath 下进行了尝试

//td[@id="mi1"]/text()

html element displaying above temperature xpath

我收到的输出

[<Selector xpath='//td[@id="mi1"]/text()' data='\xa0'>]

而不是

[<Selector xpath='//td[@id="mi1"]/text()' data='6°C'>]

是否存在编码问题?如何在 scrapy 上启用它?

实际上,数据是由 javascript 动态加载的,这就是为什么您仅使用 scrapy 无法获取实际数据的原因。你需要像 selenium 这样的带有 scrapy 的自动化工具。这里我使用了 SeleniumRequest 和 scrapy.

示例代码:

import scrapy
from scrapy_selenium import SeleniumRequest

class CoinSpider(scrapy.Spider):

    name = 'temp'

    def start_requests(self):
        url = 'https://www.netweather.tv/weather-forecasts/uk/10-day/2521~Belfast'
        yield SeleniumRequest(
            url=url,
            wait_time=3,
            callback=self.parse)

    def parse(self, response):
        yield {
                'Min_Feel_Like': response.xpath('//td[@id="mi1"]/div/text()').get()
                }

    def spider_closed(self):
        self.driver.close()

输出:(因为是温度,所以输出可能与我的不同)

[scrapy.core.scraper] DEBUG: Scraped from <200 https://www.netweather.tv/weather-forecasts/uk/10-day/2521~Belfast>
{'Min_Feel_Like': '7°c'}