对于我的工作,我必须写一个爬虫,它只保存页面的标题,交付状态和产品的数量。
以下是我的默认蜘蛛代码:
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
def start_requests(self):
urls = [
'https://www.topart-online.com/de/Ahorn-japan.%2C-70cm%2C--36-Blaetter----Herbst/c-KAT282/a-150001HE'
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
page = response.url.split("/")[-1]
filename = 'quotes-%s.html' % page
with open(filename, 'wb') as f:
f.write(response.body)
self.log('Saved file %s' % filename)我需要一个只包含以下类的输出文件:
产品名称、可用数量和交付情况
我不知道如何编辑代码,因为我在一个新文件中打印了这些值。我只知道如何将整个页面保存为一个新的.html文件。
谢谢你们的帮助
发布于 2020-07-20 09:14:58
本质上是根据选择器提取数据,这里我们使用XPATH选择器,但如果愿意,可以使用CSS选择器。有关介绍,请参阅这里。
这里是关于在文档中从Scrapy中提取数据的更多信息。
我们正在做的是从抓取HTML时得到的响应获取一个字典。键是我们的行,值是每一行的列。
代码示例
def parse(self, response):
yield {
'title': response.xpath('//h1[@class="text-center text-md-left mt-0"]/text()').get(),
'product': response.xpath('//div[@class="col-6"]/text()')[0].get().strip(),
'delivery_status': response.xpath('//div[@class="availabilitydeliverytime"]/text()').get().replace('/','').strip()
}解释
what语句返回所谓的延迟值,它与返回相关,但却有很大的不同。我建议您查阅这里,以获得更多关于区别的详细信息。
response.xpath()方法例外于XPATH选择器,可以获取数据。get()用于获取这些数据,只需一次。如果有多个带有XPATH选择器的html标记,那么getall()可以用于获取所有结果。
// -搜索整个HTMLh1 -我们希望从[@class=""] -我们要选择class=的h1标签“”/text() -抓取html标记中的文本。get()抓取了这个结果。在产品中,class= "col-6"中有多个标记,所以我们只抓取第一个标签,因为response.xpath()返回一个列表。我们使用get()方法,然后使用strip()去除任何空白。
在交付状态与上面类似,但是我们使用replace()方法来摆脱/。
当您运行scrapy脚本时,如果您想要使用JSON格式,可以使用scrapy crawl quotes -o quotes.json。文档中的更多信息这里
您应该查看docs 这里中的刮伤教程。这将对掌握基本刮板非常有帮助。这里我们将生成一个基于XPATH选择器的字典。
更多信息
对于最结构化的数据,我建议您查找项和ItemLoaders来存储数据。当您遇到需要清理的数据出现问题时,这些方法要灵活得多。生成字典是从刮伤中获取数据的最简单方法。
https://stackoverflow.com/questions/62991582
复制相似问题