上药三品,神与气精

曾因酒醉鞭名马 生怕情多累美人


  • 首页

  • 关于

  • 分类

  • 标签

  • 归档

  • 搜索

爬虫实践教程0

发表于 2016-05-15 | 分类于 pachong | 阅读次数:
字数统计: 273 | 阅读时长 ≈ 1

爬虫的基本就是从网页上获取我们需要的信息。

# coding=utf-8
from bs4 import BeautifulSoup
import requests
from pymongo import MongoClient

client = MongoClient('localhost',27017)
db = client['guazigz']
item_info = db['item_info']


def detailOper(url):
    web_data = requests.get(url)
    web_data.encoding='utf-8'
    soup = BeautifulSoup(web_data.text, 'lxml')
    titles = soup.select('div.list > ul > li > div > p.infoBox > a')
    prices = soup.select('div.list > ul > li > div > p.priType-s > span > i.fc-org.priType')
    for title, price in zip(titles, prices):
        data = {
            'title': title.get_text(),
            'detailHerf': title.get('href'),
            'price':price.get_text().replace(u'万', '').replace(' ','').replace('\n','')
    }
        item_info.insert_one(data)
        print(data)

def start():
    urls = ['http://www.guazi.com/gz/buy/o{}/'.format(str(i)) for i in range(1, 30, 1)]
    for url in urls:
        detailOper(url)

if __name__ == '__main__':
    start()

如上的程序相对来说很好阅读,
从瓜子二手车网站抓取了29页数据,每页40条,共1160条数据存入到名为guazigz的mongo数据库中。集合名为item_info,注意一下,print(data)是为了能清晰显示数据,实际是可以删除注释掉的。

Hello World

发表于 2016-05-15 | 阅读次数:
字数统计: 73 | 阅读时长 ≈ 1

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

未命名

发表于 2016-05-12 | 阅读次数:
字数统计: 1.6k | 阅读时长 ≈ 6

#MongoDB的一些小结

##强大 灵活 可扩展
1.扩展了关系型数据库的辅助索引 范围查询(range query)和排序。
内置的对MapReduce式聚合的支持,以及对地理空间索引的支持。

2.面向文档的数据库,思路首先就是将原来的“行”(row)的概念换成更加灵活的“文档”(documents)。面向文档的方式可以将文档或者数组内嵌进来,所以用一条记录就可以表示非常复杂的层次关系。这对于面向对象语言的开发者来说,是非常自然的事情。

我们先来看看一些常见的操作命令
首先进入命令行之后默认的是test数据库,一般而言我们首先需要切换到我们需要的数据库,比如这里举例一下 guazigz
use guazigz
再来详细学习

一.数据库常用命令

1.help查看命令提示

help
db.help();
db.yourColl.help();
db.youColl.find().help();
rs.help();

这里的youColl换成你数据库里对应的集合(Collection)即可

2.查询数据库

show dbs;

3.删除当前使用数据库

db.dropDatabase();

4.从指定的主机上克隆数据库

db.cloneDatabase("127.0.0.1");

5.从指定的机器上复制指定数据库数据到某个数据库

db.copyDatabase("mydb","temp","127.0.0.1")

6.修复当前数据库

db.repairDatabase();

7.查看当前使用的数据库

db.getName();
db;

8.显示当前db状态

db.stats();

9.查看当前db的链接机器地址

db.getMongo();

二.Collection聚集集合
1.创建一个聚集集合(table)

db.createCollection(“collName”, {size: 20, capped: 5, max: 100});//创建成功会显示{“ok”:1}
//判断集合是否为定容量db.collName.isCapped();

2.得到指定名称

db.getCollection("account");

3.得到当前db的所有集合

db.getCollectionNames();

4.显示当前db所有聚集索引的状态

db.printCollectionStats();

三.用户相关
1.添加一个用户

db.addUser("name");
db.addUser("userName", "pwd123", true); //添加用户、设置密码、是否只读  

2.数据库认证 安全模式

db.auth("userName", "123123");

3.显示当前所有用户

show users;

4.删除用户

db.removeUser("userName");

四.聚合集合查询

1.查询所有记录

db.userInfo.find();
//相当于: select* from userInfo;

默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”
但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize= 50;这样每页就显示50条记录了。

2.查询去掉后的当前聚集集合中的某列的重复数据

db.userInfo.distinct("name");
//会过滤掉name中的相同数据
//相当于:select distict name from userInfo;

3.查询数值范围内数据

db.userInfo.find({age: {$gte: 23, $lte: 26}});
//大于等于23,小于等于26

4.查询name中包含mongo的数据

db.userInfo.find({name: /mongo/});
//相当于%%
[code]select * from userInfo where name like ‘%mongo%';

5.查询name中以mongo开头的

db.userInfo.find({name: /^mongo/});
//select * from userInfo where name like ‘mongo%';

6.查询指定列name age数据

db.userInfo.find({}, {name: 1, age: 1});
//相当于:select name, age from userInfo;

7.查询前5条数据

db.userInfo.find().limit(5);
//相当于:selecttop 5 * from userInfo;

8.查询10条以后的数据

db.userInfo.find().skip(10);
//相当于:select * from userInfo where id not in (
selecttop 10 * from userInfo
);

9.查询某个结果集的记录条数

db.userInfo.find({age: {$gte: 20}}).count();
//相当于:select count(*) from userInfo where age >= 20;

10.按照某列进行排序

db.userInfo.find({sex: {$exists: true}}).count();
//相当于:select count(sex) from userInfo;

这一段里是比较重要的索引部分
五.索引 (index)
1.创建

db.userInfo.ensureIndex({name: 1});
db.userInfo.ensureIndex({name: 1, ts: -1});

2.查询当前聚集集合所有索引

db.userInfo.getIndexes();

3.查看总索引记录大小

db.userInfo.totalIndexSize();

4.读取当前集合的所有index信息

db.users.reIndex();

5.删除指定索引

db.users.dropIndex("name_1");

6.删除所有索引

db.users.dropIndexes();

索引这块可能详细说,有很所需要注意的地方,要不断翻阅琢磨!

这一段里是比较重要的索引部分

六. 修改 添加 删除集合数据

1.添加(save)

db.users.save({name: ‘zhangsan', age: 25, sex: true});
//添加的数据的数据列,没有固定,根据添加的数据为准

2.修改(update)

db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);
//相当于:update users set name = ‘changeName' where age = 25;
db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);
//相当于:update users set age = age + 50 where name = ‘Lisi';
db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);
//相当于:update users set age = age + 50, name = ‘hoho' where name = ‘Lisi';

3.删除(remove)

db.users.remove({age: 132});

4.查询修改删除

db.users.findAndModify({
    query: {age: {$gte: 25}}, 
    sort: {age: -1}, 
    update: {$set: {name: 'a2'}, $inc: {age: 2}},
    remove: true
});
db.runCommand({ findandmodify : "users", 
    query: {age: {$gte: 25}}, 
    sort: {age: -1}, 
    update: {$set: {name: 'a2'}, $inc: {age: 2}},
    remove: true
});

七.查看基本信息

查看聚集集合基本信息
1、查看帮助 db.yourColl.help();
2、查询当前集合的数据条数 db.yourColl.count();
3、查看数据空间大小 db.userInfo.dataSize();
4、得到当前聚集集合所在的db db.userInfo.getDB();
5、得到当前聚集的状态 db.userInfo.stats();
6、得到聚集集合总大小 db.userInfo.totalSize();
7、聚集集合储存空间大小 db.userInfo.storageSize();
8、Shard版本信息 db.userInfo.getShardVersion();
9、聚集集合重命名 db.userInfo.renameCollection(“users”); //将userInfo重命名为users
10、删除当前聚集集合 db.userInfo.drop();

show dbs:显示数据库列表 
show collections:显示当前数据库中的集合(类似关系数据库中的表) 
show users:显示用户 
use <db name>:切换当前数据库,这和MS-SQL里面的意思一样 
db.help():显示数据库操作命令,里面有很多的命令 
db.foo.help():显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令 
db.foo.find():对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据) 
db.foo.find( { a : 1 } ):对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1
1…108109
John Cheung

John Cheung

improve your python skills

543 日志
33 分类
45 标签
RSS
GitHub Email
© 2020 John Cheung
本站访客数:
|
主题 — NexT.Pisces v5.1.4
博客全站共226.3k字