手记

【学习打卡】第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管道

                

            

 

        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.必须写成.//

            


0人推荐
随时随地看视频
慕课网APP