Javascript

【学习打卡】第10天 Scrapy打造搜索引擎 items数据写入json文件中

本文主要是介绍【学习打卡】第10天 Scrapy打造搜索引擎 items数据写入json文件中,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

课程名称: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管道

                https://img1.sycdn.imooc.com/62f8c8b70001760214690825.jpg

            

 

        3.运行截图(写入article.json数据)

                https://img1.sycdn.imooc.com/62f8c95a00014ec419201030.jpg



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.代码截图

            https://img3.sycdn.imooc.com/62f8d30b000137df14641058.jpg

            https://img3.sycdn.imooc.com/62f8d3150001778614780961.jpg

        

     3.运行截图article_exporter.json

        https://img1.sycdn.imooc.com/62f8d3360001915524000966.jpg




3.问题:article.json每次只写入一行数据

post_node.xpath开始以后就要是相对路径——.//h2[@class='news_entry']/a/@href

    1.for post_node in post_nodes每次for循环得到的post_url和image_url都相同

            https://img3.sycdn.imooc.com/62f8d361000128d824001288.jpg

    

    2.原因

        post_node.xpath开始以后就要是相对路径——.//h2[@class='news_entry']/a/@href

        1.如果写成xpath('//*')  //开头的就会从整个url开头找起

        2.必须写成.//

            https://img3.sycdn.imooc.com/62f8d37b0001a07024001288.jpg


这篇关于【学习打卡】第10天 Scrapy打造搜索引擎 items数据写入json文件中的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!