为了账号安全,请及时绑定邮箱和手机立即绑定

【学习打卡】第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://img1.sycdn.imooc.com//62f8d30b000137df14641058.jpg

            https://img1.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://img1.sycdn.imooc.com//62f8d361000128d824001288.jpg

    

    2.原因

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

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

        2.必须写成.//

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


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消