我在 Jupyter Notebook 中创建了一个脚本,该脚本会废弃一个 url 并应将结果保存在 json 文件中,但它没有这样做,即使在日志中它说它这样做了。我正在使用 Google Drive 保存文件并且它已正确安装。
我把代码留给了你,尽管我认为问题可能出在FEEDS中,因为在日志中我看到它已经选择了它必须捕获的所有行。
非常感谢您的帮助。
import scrapy
from scrapy.crawler import CrawlerProcess
class DatosSpider(scrapy.Spider):
name = 'spider_datos'
start_urls = ['URL']
custom_settings = {
'FEEDS': { 'data.json': { 'format': 'json', 'overwrite': True}}
}
def parse(self, response):
events = response.xpath('//*[@id="PageContent"]/div[3]/table/tbody/tr')
for event in events:
dato1 = event.xpath('.//td[1]/text()').get()
dato2 = event.xpath('.//td[2]/text()').get()
datos = {
'Dato 1': dato1.strip() if dato1 else None,
'Dato 2': dato2.strip() if dato2 else None,
}
yield datos
process = CrawlerProcess()
process.crawl(DatosSpider)
process.start()
以下代码经过测试并且可以工作(尽管为什么要使用 Scrapy 来处理该页面中的单条数据?
import scrapy
from scrapy.crawler import CrawlerProcess
class DatosSpider(scrapy.Spider):
name = 'spider_datos'
start_urls = ['https://geoinfo.nmt.edu/nmtso/events/home.cfml']
custom_settings = {
'FEEDS': { 'data.json': { 'format': 'json', 'encoding': 'utf-8', 'overwrite': True}}
}
def parse(self, response):
events = response.xpath('//*[@id="PageContent"]/div[3]/table/tbody/tr')
for event in events:
dato1 = event.xpath('.//td[1]/text()').get()
dato2 = event.xpath('.//td[2]/text()').get()
datos = {
'Dato 1': dato1.strip() if dato1 else None,
'Dato 2': dato2.strip() if dato2 else None,
}
yield datos
process = CrawlerProcess()
process.crawl(DatosSpider)
process.start()
结果是一个如下所示的 JSON 文件:
[
{"Dato 1": "2022-11-30 15:40:32.0", "Dato 2": "32.640"}
]