继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

残梦ming
关注TA
已关注
手记 26
粉丝 2
获赞 0

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

                http://img.mukewang.com/62f8c8b70001760214690825.jpg

            

 

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

                http://img1.mukewang.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.代码截图

            http://img3.mukewang.com/62f8d30b000137df14641058.jpg

            http://img3.mukewang.com/62f8d3150001778614780961.jpg

        

     3.运行截图article_exporter.json

        http://img.mukewang.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都相同

            http://img3.mukewang.com/62f8d361000128d824001288.jpg

    

    2.原因

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

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

        2.必须写成.//

            http://img3.mukewang.com/62f8d37b0001a07024001288.jpg


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP