码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 高级深入--day41


    用Pymongo保存数据

    爬取豆瓣电影top250movie.douban.com/top250的电影数据,并保存在MongoDB中。

    items.py
    1. class DoubanspiderItem(scrapy.Item):
    2. # 电影标题
    3. title = scrapy.Field()
    4. # 电影评分
    5. score = scrapy.Field()
    6. # 电影信息
    7. content = scrapy.Field()
    8. # 简介
    9. info = scrapy.Field()
    spiders/douban.py
    1. import scrapy
    2. from doubanSpider.items import DoubanspiderItem
    3. class DoubanSpider(scrapy.Spider):
    4. name = "douban"
    5. allowed_domains = ["movie.douban.com"]
    6. start = 0
    7. url = 'https://movie.douban.com/top250?start='
    8. end = '&filter='
    9. start_urls = [url + str(start) + end]
    10. def parse(self, response):
    11. item = DoubanspiderItem()
    12. movies = response.xpath("//div[@class=\'info\']")
    13. for each in movies:
    14. title = each.xpath('div[@class="hd"]/a/span[@class="title"]/text()').extract()
    15. content = each.xpath('div[@class="bd"]/p/text()').extract()
    16. score = each.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract()
    17. info = each.xpath('div[@class="bd"]/p[@class="quote"]/span/text()').extract()
    18. item['title'] = title[0]
    19. # 以;作为分隔,将content列表里所有元素合并成一个新的字符串
    20. item['content'] = ';'.join(content)
    21. item['score'] = score[0]
    22. item['info'] = info[0]
    23. # 提交item
    24. yield item
    25. if self.start <= 225:
    26. self.start += 25
    27. yield scrapy.Request(self.url + str(self.start) + self.end, callback=self.parse)
    pipelines.py
    1. from scrapy.conf import settings
    2. import pymongo
    3. class DoubanspiderPipeline(object):
    4. def __init__(self):
    5. # 获取setting主机名、端口号和数据库名
    6. host = settings['MONGODB_HOST']
    7. port = settings['MONGODB_PORT']
    8. dbname = settings['MONGODB_DBNAME']
    9. # pymongo.MongoClient(host, port) 创建MongoDB链接
    10. client = pymongo.MongoClient(host=host,port=port)
    11. # 指向指定的数据库
    12. mdb = client[dbname]
    13. # 获取数据库里存放数据的表名
    14. self.post = mdb[settings['MONGODB_DOCNAME']]
    15. def process_item(self, item, spider):
    16. data = dict(item)
    17. # 向指定的表里添加数据
    18. self.post.insert(data)
    19. return item
    settings.py
    1. BOT_NAME = 'doubanSpider'
    2. SPIDER_MODULES = ['doubanSpider.spiders']
    3. NEWSPIDER_MODULE = 'doubanSpider.spiders'
    4. ITEM_PIPELINES = {
    5. 'doubanSpider.pipelines.DoubanspiderPipeline' : 300
    6. }
    7. # Crawl responsibly by identifying yourself (and your website) on the user-agent
    8. USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'
    9. # MONGODB 主机环回地址127.0.0.1
    10. MONGODB_HOST = '127.0.0.1'
    11. # 端口号,默认是27017
    12. MONGODB_PORT = 27017
    13. # 设置数据库名称
    14. MONGODB_DBNAME = 'DouBan'
    15. # 存放本次数据的表名称
    16. MONGODB_DOCNAME = 'DouBanMovies'
    运行
    1. 启动MongoDB数据库需要两个命令:
    2. mongod:是mongoDB数据库进程本身
    3. mongo:是命令行shell客户端
    4. sudo mongod # 首先启动数据库服务,再执行Scrapy
    5. sudo mongo # 启动数据库shell
    6. 在mongo shell下使用命令:
    7. # 查看当前数据库
    8. > db
    9. # 列出所有的数据库
    10. > show dbs
    11. # 连接DouBan数据库
    12. > use DouBan
    13. # 列出所有表
    14. > show collections
    15. # 查看表里的数据
    16. > db.DouBanMoives.find()

     

  • 相关阅读:
    惨,给Go提的代码被批麻了
    《QT从基础到进阶·二十六》绘制多个图形项(QGraphicsRectItem,QGraphicsLineItem,QGraphicsPolygonItem)
    群发邮件模板怎么优化?如何设计邮件模板?
    【阿里云数据采集】采集标准Docker容器日志:部署阿里云Logtail容器以及创建Logtail配置,用于采集标准Docker容器日志
    llama2-13的训练模型流程咨询
    quark h5 学习
    Azure 机器学习 - 如何使用模板创建安全工作区
    在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法去掉数值相同的元素。
    风控建模还在用IV特征分箱“老方法”,何不试下这个更有效的实操
    Hadoop知识点全面总结
  • 原文地址:https://blog.csdn.net/qq_41813416/article/details/134066464
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号