本教程的知識點為:爬蟲概要 爬蟲基礎(chǔ) 爬蟲概述 知識點: 1. 爬蟲的概念 requests模塊 requests模塊 知識點: 1. requests模塊介紹 1.1 requests模塊的作用: 數(shù)據(jù)提取概要 數(shù)據(jù)提取概述 知識點 1. 響應(yīng)內(nèi)容的分類 知識點:了解 響應(yīng)內(nèi)容的分類 Selenium概要 selenium的介紹 知識點: 1. selenium運行效果展示 1.1 chrome瀏覽器的運行效果 Selenium概要 selenium的其它使用方法 知識點: 1. selenium標(biāo)簽頁的切換 知識點:掌握 selenium控制標(biāo)簽頁的切換 反爬與反反爬 常見的反爬手段和解決思路 學(xué)習(xí)目標(biāo) 1 服務(wù)器反爬的原因 2 服務(wù)器常反什么樣的爬蟲 反爬與反反爬 驗證碼處理 學(xué)習(xí)目標(biāo) 1.圖片驗證碼 2.圖片識別引擎 反爬與反反爬 JS的解析 學(xué)習(xí)目標(biāo): 1 確定js的位置 1.1 觀察按鈕的綁定js事件 Mongodb數(shù)據(jù)庫 介紹 內(nèi)容 mongodb文檔 mongodb的簡單使用 Mongodb數(shù)據(jù)庫 介紹 內(nèi)容 mongodb文檔 mongodb的聚合操作 Mongodb數(shù)據(jù)庫 介紹 內(nèi)容 mongodb文檔 mongodb和python交互 scrapy爬蟲框架 介紹 內(nèi)容 scrapy官方文檔 scrapy的入門使用 scrapy爬蟲框架 介紹 內(nèi)容 scrapy官方文檔 scrapy管道的使用 scrapy爬蟲框架 介紹 內(nèi)容 scrapy官方文檔 scrapy中間件的使用 scrapy爬蟲框架 介紹 內(nèi)容 scrapy官方文檔 scrapy_redis原理分析并實現(xiàn)斷點續(xù)爬以及分布式爬蟲 scrapy爬蟲框架 介紹 內(nèi)容 scrapy官方文檔 scrapy的日志信息與配置 利用appium抓取app中的信息 介紹 內(nèi)容 appium環(huán)境安裝 學(xué)習(xí)目標(biāo)
完整筆記資料代碼:https://gitee.com/yinuo112/Backend/tree/master/爬蟲/爬蟲開發(fā)從0到1全知識教程/note.md
感興趣的小伙伴可以自取哦~
全套教程部分目錄:
部分文件圖片:
Mongodb數(shù)據(jù)庫
介紹
在前面的中我們學(xué)習(xí)了mysql這種關(guān)系型數(shù)據(jù)庫猖凛,那么接下來,我們會來學(xué)習(xí)一種非關(guān)系型數(shù)據(jù)庫mongodb绪穆,mongodb數(shù)據(jù)庫主要用于海量存儲辨泳,常被用在數(shù)據(jù)采集項目中虱岂。
內(nèi)容
- mongodb的介紹和安裝
- mongodb的簡單使用
- mongodb的增刪改查
- mongodb的聚合操作
- mongodb的索引操作
- mongodb的權(quán)限管理
- mongodb和python交互(pymongo模塊)
mongodb文檔
[
mongodb和python交互
學(xué)習(xí)目標(biāo)
- 掌握 mongdb和python交互的增刪改查的方法
- 掌握 權(quán)限認證的方式使用pymongo模塊
1. mongdb和python交互的模塊
pymongo
提供了mongdb和python交互的所有方法 安裝方式: pip install pymongo
2. 使用pymongo
2.1 導(dǎo)入pymongo并選擇要操作的集合
數(shù)據(jù)庫和集合能夠自動創(chuàng)建
2.1.1 無需權(quán)限認證的方式創(chuàng)建連接對象以及集合操作對象
from pymongo import MongoClient
client = MongoClient(host,port) # 如果是本地連接host,port參數(shù)可以省略
collection = client[db名][集合名]
# collection = client.db名.集合名 # 與上邊用法相同
2.1.2 需要權(quán)限認證的方式創(chuàng)建連接對象以及集合操作對象
from pymongo import MongoClient
from urllib.parse import quote_plus
user = 'python' # 賬號
password = 'python' # 密碼
host = '127.0.0.1' # host
port = 27017 # port
uri = "mongodb://%s:%s@%s" % (quote_plus(user),
quote_plus(password),
host)
# quote_plus函數(shù):對url進行編碼
# uri = mongodb://python:python@127.0.0.1
client = MongoClient(uri, port=port)
collection = client.db名.集合名
2.2 insert()添加數(shù)據(jù)
insert可以批量的插入數(shù)據(jù)列表,也可以插入一條數(shù)據(jù)
collection.insert({一條數(shù)據(jù)})
collection.insert([{數(shù)據(jù)一},{數(shù)據(jù)二}])
2.2.1 添加一條數(shù)據(jù)
返回插入數(shù)據(jù)的_id
ret = collection.insert({"name":"test10010","age":33})
print(ret)
2.2.2 添加多條數(shù)據(jù)
返回ObjectId對象構(gòu)成的列表
item_list = [{"name":"test1000{}".format(i)} for i in range(10)]
rets = collection.insert(item_list)
print(rets)
for ret in rets:
print(ret)
2.3 find_one()查找一條數(shù)據(jù)
接收一個字典形式的條件菠红,返回字典形式的整條數(shù)據(jù) 如果條件為空第岖,則返回第一條
ret = client.test.test.find_one({'name': 'test10001'})
print(ret) # 包含mongodb的ObjectId對象的字典
_ = ret.pop('_id') # 清除mongodb的ObjectId對象的k,v
print(ret)
2.4 find()查找全部數(shù)據(jù)
返回所有滿足條件的結(jié)果,如果條件為空试溯,則返回全部 結(jié)果是一個Cursor游標(biāo)對象蔑滓,是一個可迭代對象,可以類似讀文件的指針遇绞,但是只能夠進行一次讀取
rets = collection.find({"name":"test10005"})键袱,
for ret in rets:
print(ret)
for ret in rets: #此時rets中沒有內(nèi)容
print(ret)
2.5 update()更新數(shù)據(jù)(全文檔覆蓋或指定鍵值,更新一條或多條)
- 語法:collection.update({條件}, {'$set':{指定的kv或完整的一條數(shù)據(jù)}}, multi=False/True, upsert=False/True)
- multi參數(shù):默認為False,表示更新一條; multi=True則更新多條; multi參數(shù)必須和$set一起使用
- upsert參數(shù):默認為False; upsert=True則先查詢是否存在,存在則更新;不存在就插入
- $set表示指定字段進行更新
2.5.1 更新一條數(shù)據(jù)摹闽;全文檔覆蓋蹄咖;存在就更新,不存在就插入
data = {'msg':'這是一條完整的數(shù)據(jù)1','name':'哈哈'}
client.test.test.update({'haha': 'heihei'}, {'$set':data}, upsert=True)
2.5.2 更新多條數(shù)據(jù)付鹿;全文檔覆蓋澜汤;存在就更新,不存在就插入
data = {'msg':'這是一條完整的數(shù)據(jù)2','name':'哈哈'} # 該完整數(shù)據(jù)是先查詢后獲取的
client.test.test.update({}, {'$set':data}, multi=True, upsert=True)
2.5.3 更新一條數(shù)據(jù)舵匾;指定鍵值俊抵;存在就更新,不存在就插入
data = {'msg':'指定只更新msg___1'}
client.test.test.update({}, {'$set':data}, upsert=True)
2.5.4 更新多條數(shù)據(jù)坐梯;指定鍵值徽诲;存在就更新,不存在就插入
data = {'msg':'指定只更新msg___2'}
client.test.test.update({}, {'$set':data}, multi=True, upsert=True)
2.6 delete_one()刪除一條數(shù)據(jù)
collection.delete_one({"name":"test10010"})
2.7 delete_many()刪除全部數(shù)據(jù)
collection.delete_many({"name":"test10010"})
3. pymongo模塊其他api
查看pymongo官方文檔或源代碼 [
小結(jié)
- 掌握pymongo的增刪改查的使用
- 掌握權(quán)限認證的方式使用pymongo模塊
scrapy爬蟲框架
介紹
我們知道常用的流程web框架有django烛缔、flask馏段,那么接下來,我們會來學(xué)習(xí)一個全世界范圍最流行的爬蟲框架scrapy
內(nèi)容
- scrapy的概念作用和工作流程
- scrapy的入門使用
- scrapy構(gòu)造并發(fā)送請求
- scrapy模擬登陸
- scrapy管道的使用
- scrapy中間件的使用
- scrapy_redis概念作用和流程
- scrapy_redis原理分析并實現(xiàn)斷點續(xù)爬以及分布式爬蟲
- scrapy_splash組件的使用
- scrapy的日志信息與配置
- scrapyd部署scrapy項目
scrapy官方文檔
[
scrapy的概念和流程
學(xué)習(xí)目標(biāo):
- 了解 scrapy的概念
- 了解 scrapy框架的作用
- 掌握 scrapy框架的運行流程
- 掌握 scrapy中每個模塊的作用
1. scrapy的概念
Scrapy是一個Python編寫的開源網(wǎng)絡(luò)爬蟲框架践瓷。它是一個被設(shè)計用于爬取網(wǎng)絡(luò)數(shù)據(jù)院喜、提取結(jié)構(gòu)性數(shù)據(jù)的框架。
Scrapy 使用了Twisted['tw?st?d]異步網(wǎng)絡(luò)框架晕翠,可以加快我們的下載速度喷舀。
Scrapy文檔地址:[
2. scrapy框架的作用
少量的代碼,就能夠快速的抓取
3. scrapy的工作流程
3.1 回顧之前的爬蟲流程
3.2 上面的流程可以改寫為
3.3 scrapy的流程
其流程可以描述如下:
- 爬蟲中起始的url構(gòu)造成request對象-->爬蟲中間件-->引擎-->調(diào)度器
- 調(diào)度器把request-->引擎-->下載中間件--->下載器
- 下載器發(fā)送請求淋肾,獲取response響應(yīng)---->下載中間件---->引擎--->爬蟲中間件--->爬蟲
- 爬蟲提取url地址硫麻,組裝成request對象---->爬蟲中間件--->引擎--->調(diào)度器,重復(fù)步驟2
- 爬蟲提取數(shù)據(jù)--->引擎--->管道處理和保存數(shù)據(jù)
注意:
- 圖中中文是為了方便理解后加上去的
- 圖中綠色線條的表示數(shù)據(jù)的傳遞
- 注意圖中中間件的位置樊卓,決定了其作用
- 注意其中引擎的位置拿愧,所有的模塊之前相互獨立,只和引擎進行交互
3.4 scrapy的三個內(nèi)置對象
- request請求對象:由url method post_data headers等構(gòu)成
- response響應(yīng)對象:由url body status headers等構(gòu)成
- item數(shù)據(jù)對象:本質(zhì)是個字典
3.5 scrapy中每個模塊的具體作用
注意:
- 爬蟲中間件和下載中間件只是運行邏輯的位置不同碌尔,作用是重復(fù)的:如替換UA等
小結(jié)
scrapy的概念:Scrapy是一個為了爬取網(wǎng)站數(shù)據(jù)浇辜,提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架
-
scrapy框架的運行流程以及數(shù)據(jù)傳遞過程:
- 爬蟲中起始的url構(gòu)造成request對象-->爬蟲中間件-->引擎-->調(diào)度器
- 調(diào)度器把request-->引擎-->下載中間件--->下載器
- 下載器發(fā)送請求券敌,獲取response響應(yīng)---->下載中間件---->引擎--->爬蟲中間件--->爬蟲
- 爬蟲提取url地址,組裝成request對象---->爬蟲中間件--->引擎--->調(diào)度器柳洋,重復(fù)步驟2
- 爬蟲提取數(shù)據(jù)--->引擎--->管道處理和保存數(shù)據(jù)
scrapy框架的作用:通過少量代碼實現(xiàn)快速抓取
掌握scrapy中每個模塊的作用: 引擎(engine):負責(zé)數(shù)據(jù)和信號在不腰痛模塊間的傳遞 調(diào)度器(scheduler):實現(xiàn)一個隊列待诅,存放引擎發(fā)過來的request請求對象 下載器(downloader):發(fā)送引擎發(fā)過來的request請求,獲取響應(yīng)熊镣,并將響應(yīng)交給引擎 爬蟲(spider):處理引擎發(fā)過來的response卑雁,提取數(shù)據(jù),提取url绪囱,并交給引擎 管道(pipeline):處理引擎?zhèn)鬟f過來的數(shù)據(jù)测蹲,比如存儲 下載中間件(downloader middleware):可以自定義的下載擴展,比如設(shè)置ip 爬蟲中間件(spider middleware):可以自定義request請求和進行response過濾毕箍,與下載中間件作用重復(fù)