zoukankan      html  css  js  c++  java
  • 爬虫4

    mongodb:非关系型数据、在硬盘上

    数据库操作:
        -创建
            -use 数据库名字 (有则进入,无则创建,如果没有数据,show dbs是看不到的)
        -删除
            -use config #先切换到要删的库下
            -db.dropDatabase() #删除当前库
    
    集合操作(表操作)
        -创建
            -在表中插入一条数据,就自动创建了
                -db在哪个库中,db就是谁
                -db.table1.insert({"name":"lqz","age":18})# k可写可不写引号!
                -db.table1.insert({"name":"lqz","age":18,"sex":"男"})
            -show dbs  这个数据库就能看到了# 可以不省略写为show databases
            -show tables 这个表就能看到了
        -删除
            -db.table2.drop()
    
    数据行,文档操作
        -新增
            -db.table1.insert({"name":"lqz","age":18})
            -先定义出一个对象(字典),db.table1.insert(字典名)
            -插入多条
                -db.table1.insertMany([user1,user2,user3,user4,user5])# 每一个user都是在上方定义好的,现在没写
        -查询
            注意,自动生成的id是objectid包括4个部分组成,并不是简单的数字1,2,3
            db.table1.find()
            -1、select * from db1.user where name = "egon";
                db.table1.find({name:"egon"})
            -select * from db1.user where name != "alex";
                db.table1.find({name:{"$ne":"egon"}})
            -不等于,大于,小于,大于等于,小于等于
                -$ne  $gt   $lt   $gte      $lte
            -db.table1.find({"_id":{"$gte":2,}})
            -db.table1.find({'_id':{"$mod":[2,1]}})
            db.table.find({'_id':{"$not":{"$mod":[2,1]}}})
            -db.table1.find({"age":{"$in":[20,30,31]}})
            -db.table.find({'name':/^j.*?(g|n)$/i})
            -db.table.find({'_id':3},{'_id':0,'name':0,'age':1})
            -db.table1.find({"hobbies.3":'tea'})
            -db.table1.find({"hobbies.0":'music'})
            -db.table1.find({},{'hobbies':{"$slice":-2},"age":1,"_id":0,"name":0,"addr":0})
    
            -db.table1.find({},{'hobbies':{"$slice":-2}})
        -db.table1.find({},{'hobbies':{"$slice":[1,2]},})
            -db.user.find().sort({"_id":1,})
            -db.user.find().sort({'_id':1}).limit(2).skip(4)
            -db.table1.find({'age':{"$gt":30}}).count()
            12   34  45
    
    修改
        -db.user.update({'age':20},{"name":"Wxx","hobbies_count":3})  覆盖式的
        -db.table1.update({'_id':2},{"$set":{"name":"WXX",}})   不覆盖
        -db.table1.update({'_id':6},{"$set":{"name":"egon","age":18}},{"upsert":true})
        -db.table1.update({},
        {
            "$inc":{"age":-5}
        },
        {
            "multi":true
        }
        )
    
    
        select avg(salary) as avg_salary,post from db1.emp where id > 3 group by post having avg_salary > 10000;
    '''
    
    
    用python操作mongodb
    
    #用python操作mongodb
    from pymongo import MongoClient
    
    #1、链接
    # client=MongoClient('mongodb://root:123@localhost:27017/')
    client = MongoClient('localhost', 27017)
    
    #2、use 数据库
    db=client['db2'] #等同于:client.db1
    # db=client.test
    
    #3、查看库下所有的集合
    # print(db.collection_names(include_system_collections=False))#4、创建集合
    # table_user=db['table1'] #等同于:db.user
    table_user=db.table1
    # # #5、插入文档
    # import datetime
    # user0={
    #     "_id":1,
    #     "name":"egon",
    #     "birth":datetime.datetime.now(),
    #     "age":10,
    #     'hobbies':['music','read','dancing'],
    #     'addr':{
    #         'country':'China',
    #         'city':'BJ'
    #     }
    # }
    
    # user1={
    #     "_id":2,
    #     "name":"alex",
    #     "birth":datetime.datetime.now(),
    #     "age":10,
    #     'hobbies':['music','read','dancing'],
    #     'addr':{
    #         'country':'China',
    #         'city':'weifang'
    #     }
    # }
    # res=table_user.insert_many([user0,user1])
    # res=table_user.insert_many
    # print(res)
    # print(table_user.count())
    
    #6、查找
    
    from pprint import pprint#格式化细
    # pprint(table_user.find_one())
    # for item in table_user.find():
    #     pprint(item)
    
    # print(table_user.find_one({"_id":{"$gte":1},"name":'egon'}))
    # table_user.find()
    
    #7、更新.注意上下两个的区别!
    # table_user.update({'_id':1},{'name':'EGON'})
    
    #8、传入新的文档替换旧的文档
    table_user.save(
        {
            "_id":2,
            "name":'egon_xxx'
        }
    )
    
    

    scrapy

    -scrapy
    	-安装
    		-pip3 install scrapy
    			-先装Twisted
    			-装pywin32
    	-新建项目
    		-scrapy startproject 项目名字
    	-新建爬虫
    		-scrapy genspider 爬虫名 爬取的域名
    	-项目目录介绍
    		-spiders
    			-所有的爬虫程序
    		-items.py
    			-类似于django的model类
    		-middlewares.py
    			-中间件
    		-pipelines.py
    			-持久化相关
    		-settings.py
    			-配置文件
    		-scrapy.cfg
    			-部署相关
    	-运行爬虫
    		-scrapy crawl cnblogs --nolog(--nolog不打印日志。settings中的robotstxt=False代表不遵守爬虫协议)
    		
    	-爬取数据
    	
    	//*[@id="post_list"]/div[1]页面下右键复制
    
    运行爬虫:

    注意:两点

    代码:
    scrapy crawl cnblogs --nolog
    
    robotstxt=False  # settings中的robotstxt=False代表不遵守爬虫协议)
    
    右键启动(更目录下新建main.py文件)
    from scrapy.cmdline import execute
    # execute(['scrapy', 'crawl', 'cnblogs','--nolog'])
    execute(['scrapy', 'crawl', 'cnblogs'])
    
    # 注意一定要打印日志,因为他是异步任务,如果程序出错,通过try是不能捕捉的(只能捕捉当前线程)
    
    scrapy内置的数据查找(****)
    div_list=response.css('.post_item')  #取出class为post_item的所有
    
    
    # 获取a标签的href属性:a::attr(href)
    next_url=response.css('.pager a:last-child::attr(href)').extract_first()
    # 获取列表的第一个
    url=div.css('.post_item_body a::attr(href)').extract_first()
    
    获取页面的xpath方法:
    右键复制即可!,直接可以粘贴过来使用
    

    image-20191128191944603

    遇到一个小小的问题:

    放css查找代码书写正确,但是部分链接的图片没拿到,可能是网页又刷新了,而我浏览器的网页没有跟进!!!坑点!!
    

    image-20191128204006404

  • 相关阅读:
    Java 学习笔记(10)——容器
    Java 学习笔记(9)——java常用类
    Java 学习笔记(8)——匿名对象与内部类
    OGC相关概念解析
    Django中URL有关
    转载关于Python Web后端开发面试心得
    ArcPy中mapping常见函数及用法1
    Django1.11加载静态文件
    ArcPy第一章-Python基础
    浅谈提高Django性能
  • 原文地址:https://www.cnblogs.com/ZDQ1/p/11954042.html
Copyright © 2011-2022 走看看