🏆🏆🏆教程全知識點簡介:1.Mongodb數據庫包括介紹、mongodb簡單使用(mongodb服務端啓動、啓動mongodb客户端進入mongo shell)。2. scrapy爬蟲框架涵蓋 ip使用、啓動爬蟲、停止爬蟲、scrapyd webapi。3. Gerapy包含通過Gerapy配置管理scrapy項目。4. appium移動端抓取涉及appium自動控制移動設備、appium-python-client模塊安裝、初始化獲取移動設備分辨率、定位元素提取文本方法、控制抖某音app滑動、自動滑動代碼整理。5. 爬蟲概述包括爬蟲概念、爬蟲基礎。6. http協議複習涵蓋http及https概念區別、爬蟲關注的請求頭響應頭、常見響應狀態碼、瀏覽器運行過程。7. requests模塊包含requests發送post請求、POST請求練習、requests.session狀態保持、課堂測試。8. 數據提取概述涉及響應內容分類、xml認識、html區別、常用數據解析方法。9. 數據提取-jsonpath模塊包括jsonpath模塊使用場景。10. 數據提取-lxml模塊涵蓋lxml模塊xpath語法、谷歌瀏覽器xpath helper插件安裝使用、xpath節點關係、xpath語法基礎節點選擇、xpath定位節點提取屬性文本內容語法、語法練習、lxml模塊安裝使用示例。11. Selenium 包含獲取當前標籤頁cookie信息、cookie轉化為字典、刪除cookie、頁面等待。12. 反爬與反反爬涵蓋常見反爬手段解決思路、服務器反爬原因、服務器反爬蟲類型、反爬蟲概念、反爬三個方向、基於身份識別反爬(session發送rKey獲取登錄信息、 加密、用户名 準備、js2py生成js執行環境)。
<!-- start:bj1 -->
📚📚倉庫code.zip 👉直接-->: https://gitee.com/yinuo112/Backend/blob/master/爬蟲/爬蟲開發... 🍅🍅
<!-- end:bj1 -->
✨ 本教程項目亮點
🧠 知識體系完整:覆蓋從基礎原理、核心方法到高階應用的全流程內容
💻 全技術鏈覆蓋:完整前後端技術棧,涵蓋開發必備技能
🚀 從零到實戰:適合 0 基礎入門到提升,循序漸進掌握核心能力
📚 豐富文檔與代碼示例:涵蓋多種場景,可運行、可複用
🛠 工作與學習雙參考:不僅適合系統化學習,更可作為日常開發中的查閲手冊
🧩 模塊化知識結構:按知識點分章節,便於快速定位和複習
📈 長期可用的技術積累:不止一次學習,而是能伴隨工作與項目長期參考
🎯🎯🎯全教程總章節
🚀🚀🚀本篇主要內容
scrapy爬蟲框架
介紹
知道常用的流程web框架有django、flask,那麼接下來, 會來學習一個全世界範圍最流行的爬蟲框架scrapy
內容
- scrapy的概念作用和工作流程
- scrapy的入門使用
- scrapy構造併發送請求
- scrapy模擬登陸
- scrapy管道的使用
- scrapy中間件的使用
- scrapy_redis概念作用和流程
- scrapy_redis原理分析並實現斷點續爬以及分佈式爬蟲
- scrapy_splash組件的使用
- scrapy的日誌信息與配置
- scrapyd部署scrapy項目
scrapy官方文檔
https://scrapy-chs.readthedocs.io/zh_CN/0.24/index.html
scrapy管道的使用
學習目標:
- 掌握 scrapy管道(pipelines.py)的使用
之前 在scrapy入門使用一節中學習了管道的基本使用,接下來 深入的學習scrapy管道的使用
1. pipeline中常用的方法:
-
process_item(self,item,spider):
- 管道類中必須有的函數
- 實現對item數據的處理
- 必須return item
- open_spider(self, spider): 在爬蟲開啓的時候僅執行一次
- close_spider(self, spider): 在爬蟲關閉的時候僅執行一次
2. 管道文件的修改
繼續完善wangyi爬蟲,在pipelines.py代碼中完善
os 文檔
import json
from pymongo import MongoClient
class WangyiFilePipeline(object):
def open_spider(self, spider): # 在爬蟲開啓的時候僅執行一次
if spider.name == 'itcast':
self.f = open('json.txt', 'a', encoding='utf-8')
def close_spider(self, spider): # 在爬蟲關閉的時候僅執行一次
if spider.name == 'itcast':
self.f.close()
def process_item(self, item, spider):
if spider.name == 'itcast':
self.f.write(json.dumps(dict(item), ensure_ascii=False, indent=2) + ',\n')
# 不return的情況下,另一個權重較低的pipeline將不會獲得item
return item
class WangyiMongoPipeline(object):
def open_spider(self, spider): # 在爬蟲開啓的時候僅執行一次
if spider.name == 'itcast':
# 也可以使用isinstanc函數來區分爬蟲類:
con = MongoClient(host='127.0.0.1', port=27017) # 實例化mongoclient
self.collection = con.itcast.teachers # 創建數據庫名為itcast,集合名為teachers的集合操作對象
def process_item(self, item, spider):
if spider.name == 'itcast':
self.collection.insert(item)
# 此時item對象必須是一個字典,再插入
# 如果此時item是BaseItem則需要先轉換為字典:dict(BaseItem)
# 不return的情況下,另一個權重較低的pipeline將不會獲得item
return item
3. 開啓管道
在settings.py設置開啓pipeline
......
ITEM_PIPELINES = {
'myspider.pipelines.ItcastFilePipeline': 400, # 400表示權重
'myspider.pipelines.ItcastMongoPipeline': 500, # 權重值越小,越優先執行!
}
......
SymPy 文檔
別忘了開啓mongodb數據庫 sudo service mongodb start 並在mongodb數據庫中查看 mongo
思考:在settings中能夠開啓多個管道,為什麼需要開啓多個?
Python 開發者指南
- 不同的pipeline可以處理不同爬蟲的數據,通過spider.name屬性來區分
- 不同的pipeline能夠對一個或多個爬蟲進行不同的數據處理的操作,比如一個進行數據清洗,一個進行數據的保存
- 同一個管道類也可以處理不同爬蟲的數據,通過spider.name屬性來區分
4. pipeline使用注意點
- 使用之前需要在settings中開啓
- pipeline在setting中鍵表示位置(即pipeline在項目中的位置可以自定義),值表示距離引擎的遠近,越近數據會越先經過:權重值小的優先執行
- 有多個pipeline的時候,process_item的方法必須return item,否則後一個pipeline取到的數據為None值
- pipeline中process_item的方法必須有,否則item沒有辦法接受和處理
- process_item方法接受item和spider,其中spider表示當前傳遞item過來的spider
- open_spider(spider) :能夠在爬蟲開啓的時候執行一次
- close_spider(spider) :能夠在爬蟲關閉的時候執行一次
- 上述倆個方法經常用於爬蟲和數據庫的交互,在爬蟲開啓的時候建立和數據庫的連接,在爬蟲關閉的時候斷開和數據庫的連接
小結
-
管道能夠實現數據的清洗和保存,能夠定義多個管道實現不同的功能,其中有個三個方法
- process_item(self,item,spider):實現對item數據的處理
- open_spider(self, spider): 在爬蟲開啓的時候僅執行一次
- close_spider(self, spider): 在爬蟲關閉的時候僅執行一次
scrapy的crawlspider爬蟲
學習目標:
- 瞭解 crawlspider的作用
- 應用 crawlspider爬蟲創建的方法
- 應用 crawlspider中rules的使用
1 crawlspider是什麼
回顧之前的代碼中, 有很大一部分時間在尋找下一頁的url地址或者是內容的url地址上面,這個過程能更簡單一些麼?
思路:
- 從response中提取所有的滿足規則的url地址
- 自動的構造自己requests請求,發送給引擎
對應的crawlspider就可以實現上述需求,能夠匹配滿足條件的url地址,組裝成Reuqest對象後自動發送給引擎,同時能夠指定callback函數
即:crawlspider爬蟲可以按照規則自動獲取連接
2 創建crawlspider爬蟲並觀察爬蟲內的默認內容
watchdog 文檔
2.1 創建crawlspider爬蟲:
scrapy genspider -t crawl job 163.com
2.2 spider中默認生成的內容如下:
class JobSpider(CrawlSpider):
name = 'job'
allowed_domains = ['163.com']
start_urls = ['https://hr.163.com/position/list.do']
rules = (
Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),
)
def parse_item(self, response):
i = {}
#i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract()
#i['name'] = response.xpath('//div[@id="name"]').extract()
#i['description'] = response.xpath('//div[@id="description"]').extract()
return i
Redis python客户端 方法參考
2.3 觀察跟普通的scrapy.spider的區別
在crawlspider爬蟲中,沒有parse函數
重點在rules中:
- rules是一個元組或者是列表,包含的是Rule對象
- Rule表示規則,其中包含LinkExtractor,callback和follow等參數
- LinkExtractor:連接提取器,可以通過正則或者是xpath來進行url地址的匹配
- callback :表示經過連接提取器提取出來的url地址響應的回調函數,可以沒有,沒有表示響應不會進行回調函數的處理
- follow:連接提取器提取的url地址對應的響應是否還會繼續被rules中的規則進行提取,True表示會,Flase表示不會
3. crawlspider網易招聘爬蟲
通過crawlspider爬取網易招聘的詳情頁的招聘信息
url:https://hr.163.com/position/list.do
思路分析:
fabric 文檔
- 定義一個規則,來進行列表頁翻頁,follow需要設置為True
- 定義一個規則,實現從列表頁進入詳情頁,並且指定回調函數
- 在詳情頁提取數據
注意:連接提取器LinkExtractor中的allow對應的正則表達式匹配的是href屬性的值
4 crawlspider使用的注意點:
- 除了用命令
scrapy genspider -t crawl <爬蟲名> <allowed_domail>創建一個crawlspider的模板,頁可以手動創建 - crawlspider中不能再有以parse為名的數據提取方法,該方法被crawlspider用來實現基礎url提取等功能
- Rule對象中LinkExtractor為固定參數,其他callback、follow為可選參數
- 不指定callback且follow為True的情況下,滿足rules中規則的url還會被繼續提取和請求
- 如果一個被提取的url滿足多個Rule,那麼會從rules中選擇一個滿足匹配條件的Rule執行
5 瞭解crawlspider其他知識點
requests-oauthlib 文檔
-
鏈接提取器LinkExtractor的更多常見參數
- allow: 滿足括號中的're'表達式的url會被提取,如果為空,則全部匹配
- deny: 滿足括號中的're'表達式的url不會被提取,優先級高於allow
- allow_domains: 會被提取的鏈接的domains(url範圍),如:
['hr.tencent.com', 'baidu.com'] - deny_domains: 不會被提取的鏈接的domains(url範圍)
- restrict_xpaths: 使用xpath規則進行匹配,和allow共同過濾url,即xpath滿足的範圍內的url地址會被提取,如:
restrict_xpaths='//div[@class="pagenav"]'
-
Rule常見參數
- LinkExtractor: 鏈接提取器,可以通過正則或者是xpath來進行url地址的匹配
- callback: 表示經過連接提取器提取出來的url地址響應的回調函數,可以沒有,沒有表示響應不會進行回調函數的處理
- follow: 連接提取器提取的url地址對應的響應是否還會繼續被rules中的規則進行提取,默認True表示會,Flase表示不會
- process_links: 當鏈接提取器LinkExtractor獲取到鏈接列表的時候調用該參數指定的方法,這個自定義方法可以用來過濾url,且這個方法執行後才會執行callback指定的方法
總結
- crawlspider的作用:crawlspider可以按照規則自動獲取連接
- cr