课程名称:Scrapy打造搜索引擎(分布式爬虫)
课程章节:items数据写入json文件中
主讲老师:bobby
课程内容:
今天学习的内容包括:items数据写入json文件中
课程收获:
1.items数据写入json文件
1.代码
# 自定义json文件的导出 class JsonWithEncodingPipeline: def __init__(self): # "a"——表示数据以追加的方式写入 "w"——每次写入都会抹除之前的数据 self.file = codecs.open("article.json", "a", encoding="utf-8") def process_item(self, item, spider): # 注:def process_item(self, item, spider)方法名参数必须按照此方式写,否则scrapy找不到 lines = json.dumps(dict(item), ensure_ascii=False) + "\n" self.file.write(lines) return item def spider_closed(self, spider): # 爬虫结束自动调用 self.file.close()
2.setting.py中配置JsonWithEncodingPipeline管道
3.运行截图(写入article.json数据)
2.使用scrapy中自带的pipeline
1.代码
# 使用scrapy自带的方式导出数据 class JsonExporterPipeline: def __init__(self): # 文件打开 'wb'——表示以二进制的方式打开 self.file = open('article_exporter.json', 'wb') self.exporter = JsonItemExporter(self.file, encoding="utf-8", ensure_ascii=False) self.exporter.start_exporting() def process_item(self, item, spider): self.exporter.export_item(item) return item def spider_closed(self, spider): # 爬虫结束自动调用 self.exporter.finish_exporting() self.file.close()
2.代码截图
3.运行截图article_exporter.json
3.问题:article.json每次只写入一行数据
post_node.xpath开始以后就要是相对路径——.//h2[@class='news_entry']/a/@href
1.for post_node in post_nodes每次for循环得到的post_url和image_url都相同
2.原因
post_node.xpath开始以后就要是相对路径——.//h2[@class='news_entry']/a/@href
1.如果写成xpath('//*') //开头的就会从整个url开头找起
2.必须写成.//