注意:
爬取網站的流程:
- 確定網站哪個url是數據的來源。
- 簡要分析一下網站結構,查看數據一般放在哪裏。
- 發送請求requests,查看response.text裏面是否有我們想要的數據內容。
- 如果有數據,就用相應的提取數據的方法提取數據保存。
- 如果沒有,我們就可以通過以下兩種方法來實現爬取:
(1)分析數據來源,查看是否通過一些接口獲取到的頁面數據。(首推)
如果沒有在頁面中返回數據,我們應該首先想到,數據有可能是從ajax接口中獲取的。
分析接口的步驟:
1.查看該接口返回的數據是否使我們想要的。
2.重點查看該接口的請求參數。
瞭解哪些請求參數是變化的以及他的變化規律。
(2)selenium+phantomjs來獲取頁面內容。 - 查看是否有分頁,解決分頁的問題。
文章目錄
一、分頁的兩種方法
(1)for循環
for i in range(1,20):
response = requests.get(url %i)
注意:這種方法只能用你知道最大頁的前提下。
(2)while True循環
i =0 #初始頁碼
while True:
# print(2)
json_str = get_conent(url.format(type_,i) ,headers =headers )
print(json_str)
#必須要制定跳出循環的邊界。
if json_str =='[]':
# print(1)
break
json_data = json.loads(json_str)
parse_json(json_data)
i+=20
注意:這種情況是用在返回json數據的前提下,具體問題具體分析
二、mongo安裝
1. 路徑
注意:最重要的是指定路徑custom;路徑中不能包含中文和空格
修改爲C:\MongoDB\Server\3.4
方便操作
2. 環境變量
將下面的路徑配置到path中
C:\MongoDB\Server\3.4\bin
3. 驗證
打開cmd,輸出mongod
安裝後cmd命令行輸入mongod出現如下結果就代表安裝成功
4. 新建一個存放數據庫的文件夾
C:\MongoDB\Server\3.4\data\db
再新建db
5. 啓動mongo
注意:mongod啓動的是服務器
mongod --dbpath C:\MongoDB\Server\3.4\data\db
啓動成功:
三、將mongo配置成一個服務
注意:MongoDB默認端口號27017
1. 創建logs文件夾
路徑:C:\MongoDB\Server\3.4\data\logs
2. 以管理員方式開啓cmd
3. 進入mongodb的bin文件夾下
4. 運行命令
mongod --bind_ip 0.0.0.0 --logpath C:\MongoDB\Server\3.4\data\logs\mango.log --logappend --dbpath C:\MongoDB\Server\3.4\data\db --port 27017 --serviceName "MongoDB" --serviceDisplayName "MongoDB" --install
4. 服務中啓動MongoDB
首次啓動服務
計算機右擊選擇管理,找到服務,輸入m回車,找到MongoDB,啓動服務
四、MongoDB啓動客戶端和服務器命令
mongod ------------啓動mongo服務器。
mongod --dbpath 數據存放的文件夾
mongo---------啓動一個客戶端。客戶端是用來做增上改查這些操作的。
五、MongoDB簡介
非關係型數據庫的出現
nosql提高網站性能
MongoDB保存的是最常用的數據
MongoDB數據存在硬盤(不常用)
redis數據存在內存(最常用)
mysql關係型數據庫(最不常用的數據)
緩存在web下是最常用的
1. 、mongodb 文檔數據庫
存儲的是文檔(Bson->json的二進制化).
如:{name:'zhangsan',age:'9'}
特點 : 內部執行引擎爲JS解釋器, 把文檔存儲成bson結構,在查詢時,轉換爲JS對象,並可以通過熟悉的js語法來操作.
2. mongo和傳統型數據庫的不同
- 傳統型數據庫: 結構化數據, 定好了表結構後,每一行的內容,必是符合表結構的,就是說–列的個數,類型都一樣.
- mongo文檔型數據庫: 表下的每篇文檔,都可以有自己獨特的結構(json對象都可以有自己獨特的屬性和值)
- mongo數據庫和collection不用提前創建。(可以隱式創建。)
簡單來說mongo數據庫表結構不固定,一個文檔(類似於表)你可以寫入任意的字段,無約束(沒有固定的結構)。庫和表可以隱性創建:在你沒有真正創建庫和表,能寫入數據。
沒有固定的結構,如:
{name:"張三",age:19,sex:"男"}
而另一個文檔可以這樣寫:
{name:"李四"}
沒有固定的結構
3. mongodb數據庫bin目錄下的文件意義
文件 | 意義 |
---|---|
bsondump.exe | 導出bsondump結構 |
mongo.exe | 客戶端 |
mongod.exe | 服務端 |
mongodump.exe | 整體數據庫導出(備份工具) |
mongoexport.exe | 導出易識別的json文檔 |
mongofiles.exe | GridFS工具,內建的分佈式文件系統 |
mongoimport.exe | 數據導入程序 |
mongorestore.exe | 數據恢復工具 |
mongos.exe | 路由器(分片時使用) |
mongostat.exe | 監視程序 |
4. mongodb中對數據庫的描述及相關命令
-
一個mongodb中可以建立多個數據庫。
-
MongoDB的默認數據庫爲"db",該數據庫存儲在data目錄中。
-
MongoDB的單個實例可以容納多個獨立的數據庫,每一個都有自己的集合和權限,不同的數據庫也放置在不同的文件中。
-
"show dbs" 命令可以顯示所有數據的列表。
-
執行 “db” 命令可以顯示當前數據庫對象或集合。
-
運行"use"命令,可以連接到一個指定的數據庫。
5. MongoDB數據庫的命名規則
- 不能是空字符串("")
- 不得含有’ '(空格)、.、$、/、\和\0 (空字符)
- 應全部小寫
- 最多64字節
有一些數據庫名是保留的,可以直接訪問這些有特殊作用的數據庫。
- admin: 從權限的角度來看,這是"root"數據庫。要是將一個用戶添加到這個數據庫,這個用戶自動繼承所有數據庫的權限。一些特定的服務器端命令也只能從這個數據庫運行,比如列出所有的數據庫或者關閉服務器。
- local: 這個數據永遠不會被複制,可以用來存儲限於本地單臺服務器的任意集合
- config: 當Mongo用於分片設置時,config數據庫在內部使用,用於保存分片的相關信息。
6. 文檔
文檔是一組 鍵值(key-value)對(即 BSON)。 MongoDB 的文檔不需要設置相同的字段,並且相同的字段不需要相同的數據類型,這與關係型數據庫有很大的區別,也是 MongoDB 非常突出的特點。(沒有固定的結構)
示例:
{,"name":"張三",age:"19"}
關係數據庫管理系統 RDBMS(Relational Database Management System)與 MongoDB 對應的術語:
需要注意的是:
- 文檔中的鍵/值對是有序的。
- 文檔中的值不僅可以是在雙引號裏面的字符串,還可以是其他幾種數據類型(甚至可以是整個嵌入的文檔)。
- MongoDB區分類型和大小寫。
- MongoDB的文檔不能有重複的鍵。
- 文檔的鍵是字符串。除了少數例外情況,鍵可以使用任意UTF-8字符。(我們在插入數據沒加""時,在查找出來會自動給我們加上引號,因爲鍵本身是字符串)
7. 文檔鍵命名規範
- 鍵不能含有\0 (空字符)。這個字符用來表示鍵的結尾。
- .和$有特別的意義,只有在特定環境下才能使用。
- 以下劃線"_"開頭的鍵是保留的(不是嚴格要求的)。
8. 集合(文檔組)
集合就是 MongoDB 文檔組,類似於 RDBMS (關係數據庫管理系統:Relational Database Management System)中的表格。
集合存在於數據庫中,集合沒有固定的結構,這意味着你在對集合可以插入不同格式和類型的數據,但通常情況下我們插入集合的數據都會有一定的關聯性。
{"name":"張三"}
{"name":"李四","age":10}
{"name":"王五","age":5,"sex":"男"}
注意:當第一個文檔插入時,集合就會被創建。
10. 集合名規則
- 集合名不能是空字符串""。
- 集合名不能含有\0字符(空字符),這個字符表示集合名的結尾。
- 集合名不能以"system."開頭,這是爲系統集合保留的前綴。
- 用戶創建的集合名字不能含有保留字符。有些驅動程序的確支持在集合名裏面包含,這是因爲某些系統生成的集合中包含該字符。除非你要訪問這種系統創建的集合,否則千萬不要在名字裏出現$。
11. MongoDB 數據類型
六、MongoDB創建庫和文檔以及他們的刪除
1. 庫的創建
(1)創建庫的第一種方法
Mongodb的庫是隱式創建,你可以use 一個不存在的庫,然後在該庫下創建collection,即可創建庫
- 第一步:
use 庫名
(隱性創庫) - 第二步:
db.createCollection(‘集合名’)
(在該庫下面創建集合,就可以創建一個數據庫)
注意:這種方法在創建庫的同時也創建了一個集合。
(2)創建庫的第二種方法
- 第一步:
use 庫名
- 第二步:
db.collectionName(集合名).insert(document(文檔))
注意:這種方法不僅隱性創建了庫,同時也隱性創建了集合collection;並且集合中也插入了數據即文檔
2. 集合的創建
(1)庫不存在的時候創建
use 庫名
db.createCollection('collectionName(集合名)')
(2)庫存在的時候
步驟同上,也是先進庫不同的是上面的方法也創建了庫use 庫名
db.createCollection('collectionName(集合名)')
(3)直接插入數據順帶創建集合use 庫名
db.stu(集合名).insert({"name":"張三"})
這一方法即說明了在MongoDB中,collection也是可以隱身創建的
3. 刪除數據庫和集合
- 刪除數據庫(必須進入庫)
use 庫名
db.dropDatabase()//刪除數據庫
- 刪除集合(必須進入集合所在的庫)
use 庫名
db.collectionName(集合名).drop()//刪除集合
注意:唯一的集合刪除(刪除集合後庫中沒有集合了),庫也就刪除了
4. MongoDB的一些基本入門命令
- db代表當前數據庫
- db.stu.find()查看錶的數據
- show dbs 查看當前的數據庫
- use databaseName(庫名) 選庫
- show collections 查看當前庫下的collection,也可以用show tables