解析给出 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'}
我尝试在以下网站上使用 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'}