爬蟲開發(fā)從0到1全知識教程完整教程(附代碼資料)主要內(nèi)容講述:爬蟲課程概要,爬蟲基礎(chǔ)爬蟲概述,
,http協(xié)議復(fù)習。requests模塊,requests模塊1. requests模塊介紹,2. response響應(yīng)對象,3. requests模塊發(fā)送請求,4. requests模塊發(fā)送post請求,5. 利用requests.session進行狀態(tài)保持。數(shù)據(jù)提取概要,數(shù)據(jù)提取概述1. 響應(yīng)內(nèi)容的分類,2. 認識xml以及和html的區(qū)別,1. jsonpath模塊的使用場景,2. jsonpath模塊的使用方法,3. jsonpath練習,1. 了解 lxml模塊和xpath語法。Selenium課程概要selenium的介紹,selenium提取數(shù)據(jù)。Selenium課程概要,反爬與反反爬selenium的其它使用方法。反爬與反反爬常見的反爬手段和解決思路。反爬與反反爬驗證碼處理,chrome瀏覽器使用方法介紹。反爬與反反爬,Mongodb數(shù)據(jù)庫JS的解析,介紹,內(nèi)容,mongodb文檔,Mongodb的介紹和安裝,小結(jié)。Mongodb數(shù)據(jù)庫介紹,內(nèi)容,mongodb文檔,mongodb的簡單使用,小結(jié),Mongodb的的增刪改查。Mongodb數(shù)據(jù)庫介紹,內(nèi)容,mongodb文檔,mongodb的聚合操作,2 mongodb的常用管道和表達式,Mongodb的索引操作。Mongodb數(shù)據(jù)庫,scrapy爬蟲框架介紹,內(nèi)容,mongodb文檔,mongodb和python交互,小結(jié),介紹。scrapy爬蟲框架,scrapy爬蟲框架介紹,內(nèi)容,scrapy官方文檔,scrapy的入門使用,小結(jié),介紹。scrapy爬蟲框架介紹,內(nèi)容,scrapy官方文檔,scrapy管道的使用,小結(jié),scrapy的crawlspider爬蟲。scrapy爬蟲框架介紹,內(nèi)容,scrapy官方文檔,scrapy中間件的使用,小結(jié),scrapy_redis概念作用和流程。scrapy爬蟲框架介紹,內(nèi)容,scrapy官方文檔,scrapy_redis原理分析并實現(xiàn)斷點續(xù)爬以及分布式爬蟲,小結(jié),scrapy_splash組件的使用。scrapy爬蟲框架介紹,內(nèi)容,scrapy官方文檔,scrapy的日志信息與配置,小結(jié),scrapyd部署scrapy項目。利用appium抓取app中的信息,利用appium抓取app中的信息介紹,內(nèi)容,appium環(huán)境安裝,介紹,內(nèi)容,利用appium自動控制移動設(shè)備并提取數(shù)據(jù)。appium環(huán)境安裝,Mongodb的介紹和安裝,小結(jié)。scrapy的概念和流程 ,小結(jié),selenium的介紹,常見的反爬手段和解決思路。數(shù)據(jù)提取概述1. 響應(yīng)內(nèi)容的分類,2. 認識xml以及和html的區(qū)別,爬蟲概述,http協(xié)議復(fù)習。mongodb的簡單使用,小結(jié),scrapy的入門使用,小結(jié)。selenium提取數(shù)據(jù),利用appium自動控制移動設(shè)備并提取數(shù)據(jù)。驗證碼處理。數(shù)據(jù)提取-jsonpath模塊1. jsonpath模塊的使用場景,2. jsonpath模塊的使用方法,3. jsonpath練習,chrome瀏覽器使用方法介紹,Mongodb的的增刪改查,小結(jié)。scrapy數(shù)據(jù)建模與請求,小結(jié),selenium的其它使用方法。數(shù)據(jù)提取-lxml模塊1. 了解 lxml模塊和xpath語法,2. 谷歌瀏覽器xpath helper插件的安裝和使用,3. xpath的節(jié)點關(guān)系,4. xpath語法-基礎(chǔ)節(jié)點選擇語法,5. xpath語法-節(jié)點修飾語法,6. xpath語法-其他常用節(jié)點選擇語法。JS的解析,mongodb的聚合操作,2 mongodb的常用管道和表達式。scrapy模擬登陸,小結(jié),Mongodb的索引操作,小結(jié),scrapy管道的使用,小結(jié)。Mongodb的權(quán)限管理,小結(jié),scrapy中間件的使用,小結(jié)。mongodb和python交互,小結(jié),scrapy_redis概念作用和流程,小結(jié),scrapy_redis原理分析并實現(xiàn)斷點續(xù)爬以及分布式爬蟲,小結(jié)。scrapy_splash組件的使用,小結(jié),scrapy的日志信息與配置,小結(jié)。scrapyd部署scrapy項目,13.Gerapy,13.Gerapy。1.2.1-簡單的代碼實現(xiàn),目標urlscrapy的crawlspider爬蟲。
全套筆記資料代碼移步: 前往gitee倉庫查看
感興趣的小伙伴可以自取哦,歡迎大家點贊轉(zhuǎn)發(fā)~
全套教程部分目錄:
部分文件圖片:
Selenium課程概要
本階段課程主要學習selenium自動化測試框架在爬蟲中的應(yīng)用,selenium能夠大幅降低爬蟲的編寫難度,但是也同樣會大幅降低爬蟲的爬取速度。在逼不得已的情況下我們可以使用selenium進行爬蟲的編寫。
selenium的其它使用方法
知識點:
- 掌握 selenium控制標簽頁的切換
- 掌握 selenium控制iframe的切換
- 掌握 利用selenium獲取cookie的方法
- 掌握 手動實現(xiàn)頁面等待
- 掌握 selenium控制瀏覽器執(zhí)行js代碼的方法
- 掌握 selenium開啟無界面模式
- 了解 selenium使用ip
- 了解 selenium替換user-agent
1. selenium標簽頁的切換
當selenium控制瀏覽器打開多個標簽頁時,如何控制瀏覽器在不同的標簽頁中進行切換呢?需要我們做以下兩步:
- 獲取所有標簽頁的窗口句柄
-
利用窗口句柄字切換到句柄指向的標簽頁
-
這里的窗口句柄是指:指向標簽頁對象的標識
-
[關(guān)于句柄請課后了解更多,本小節(jié)不做展開](
-
具體的方法
# 1. 獲取當前所有的標簽頁的句柄構(gòu)成的列表
current_windows = driver.window_handles
# 2. 根據(jù)標簽頁句柄列表索引下標進行切換
driver.switch_to.window(current_windows[0])
- 參考代碼示例:
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("
time.sleep(1)
driver.find_element_by_id('kw').send_keys('python')
time.sleep(1)
driver.find_element_by_id('su').click()
time.sleep(1)
# 通過執(zhí)行js來新開一個標簽頁
js = 'window.open("
driver.execute_script(js)
time.sleep(1)
# 1. 獲取當前所有的窗口
windows = driver.window_handles
time.sleep(2)
# 2. 根據(jù)窗口索引進行切換
driver.switch_to.window(windows[0])
time.sleep(2)
driver.switch_to.window(windows[1])
time.sleep(6)
driver.quit()
知識點:掌握 selenium控制標簽頁的切換
2. switch_to切換frame標簽
iframe是html中常用的一種技術(shù),即一個頁面中嵌套了另一個網(wǎng)頁,selenium默認是訪問不了frame中的內(nèi)容的,對應(yīng)的解決思路是driver.switch_to.frame(frame_element)
。接下來我們通過qq郵箱模擬登陸來學習這個知識點
- 參考代碼:
import time
from selenium import webdriver
driver = webdriver.Chrome()
url = '
driver.get(url)
time.sleep(2)
login_frame = driver.find_element_by_id('login_frame') # 根據(jù)id定位 frame元素
driver.switch_to.frame(login_frame) # 轉(zhuǎn)向到該frame中
driver.find_element_by_xpath('//*[@id="u"]').send_keys('1596930226@qq.com')
time.sleep(2)
driver.find_element_by_xpath('//*[@id="p"]').send_keys('hahamimashicuode')
time.sleep(2)
driver.find_element_by_xpath('//*[@id="login_button"]').click()
time.sleep(2)
"""操作frame外邊的元素需要切換出去"""
windows = driver.window_handles
driver.switch_to.window(windows[0])
content = driver.find_element_by_class_name('login_pictures_title').text
print(content)
driver.quit()
-
總結(jié):
-
切換到定位的frame標簽嵌套的頁面中
driver.switch_to.frame(通過find_element_by函數(shù)定位的frame、iframe標簽對象)
-
利用切換標簽頁的方式切出frame標簽
- ```python windows = driver.window_handles driver.switch_to.window(windows[0])
---
##### 知識點:掌握 selenium控制frame標簽的切換
---
### 3. selenium對cookie的處理
>
selenium能夠幫助我們處理頁面中的cookie,比如獲取、刪除,接下來我們就學習這部分知識
#### 3.1 獲取cookie
>
`driver.get_cookies()`返回列表,其中包含的是完整的cookie信息!不光有name、value,還有domain等cookie其他維度的信息。所以如果想要把獲取的cookie信息和requests模塊配合使用的話,需要轉(zhuǎn)換為name、value作為鍵值對的cookie字典
```python
# 獲取當前標簽頁的全部cookie信息
print(driver.get_cookies())
# 把cookie轉(zhuǎn)化為字典
cookies_dict = {cookie[‘name’]: cookie[‘value’] for cookie in driver.get_cookies()}
3.2 刪除cookie
#刪除一條cookie
driver.delete_cookie("CookieName")
# 刪除所有的cookie
driver.delete_all_cookies()
知識點:掌握 利用selenium獲取cookie的方法
4. selenium控制瀏覽器執(zhí)行js代碼
selenium可以讓瀏覽器執(zhí)行我們規(guī)定的js代碼,運行下列代碼查看運行效果
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("
time.sleep(1)
js = 'window.scrollTo(0,document.body.scrollHeight)' # js語句
driver.execute_script(js) # 執(zhí)行js的方法
time.sleep(5)
driver.quit()
- 執(zhí)行js的方法:
driver.execute_script(js)
知識點:掌握 selenium控制瀏覽器執(zhí)行js代碼的方法
5. 頁面等待
頁面在加載的過程中需要花費時間等待網(wǎng)站服務(wù)器的響應(yīng),在這個過程中標簽元素有可能還沒有加載出來,是不可見的,如何處理這種情況呢?
- 頁面等待分類
- 強制等待介紹
- 顯式等待介紹
- 隱式等待介紹
- 手動實現(xiàn)頁面等待
5.1 頁面等待的分類
首先我們就來了解以下selenium頁面等待的分類
- 強制等待
- 隱式等待
- 顯式等待
5.2 強制等待(了解)
- 其實就是time.sleep()
- 缺點時不智能,設(shè)置的時間太短,元素還沒有加載出來;設(shè)置的時間太長,則會浪費時間
5.3 隱式等待
-
隱式等待針對的是元素定位,隱式等待設(shè)置了一個時間,在一段時間內(nèi)判斷元素是否定位成功,如果完成了,就進行下一步
-
在設(shè)置的時間內(nèi)沒有定位成功,則會報超時加載
-
示例代碼
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10) # 隱式等待,最長等20秒
driver.get('
driver.find_element_by_xpath()
5.4 顯式等待(了解)
-
每經(jīng)過多少秒就查看一次等待條件是否達成,如果達成就停止等待,繼續(xù)執(zhí)行后續(xù)代碼
-
如果沒有達成就繼續(xù)等待直到超過規(guī)定的時間后,報超時異常
-
示例代碼
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('
# 顯式等待
WebDriverWait(driver, 20, 0.5).until(
EC.presence_of_element_located((By.LINK_TEXT, '好123')))
# 參數(shù)20表示最長等待20秒
# 參數(shù)0.5表示0.5秒檢查一次規(guī)定的標簽是否存在
# EC.presence_of_element_located((By.LINK_TEXT, '好123')) 表示通過鏈接文本內(nèi)容定位標簽
# 每0.5秒一次檢查,通過鏈接文本內(nèi)容定位標簽是否存在,如果存在就向下繼續(xù)執(zhí)行;如果不存在,直到20秒上限就拋出異常
print(driver.find_element_by_link_text('好123').get_attribute('href'))
driver.quit()
5.5 手動實現(xiàn)頁面等待
在了解了隱式等待和顯式等待以及強制等待后,我們發(fā)現(xiàn)并沒有一種通用的方法來解決頁面等待的問題,比如“頁面需要滑動才能觸發(fā)ajax異步加載”的場景,那么接下來我們就以[淘寶網(wǎng)首頁](
-
原理:
-
利用強制等待和顯式等待的思路來手動實現(xiàn)
-
不停的判斷或有次數(shù)限制的判斷某一個標簽對象是否加載完畢(是否存在)
-
實現(xiàn)代碼如下:
import time
from selenium import webdriver
driver = webdriver.Chrome('/home/worker/Desktop/driver/chromedriver')
driver.get('
time.sleep(1)
# i = 0
# while True:
for i in range(10):
i += 1
try:
time.sleep(3)
element = driver.find_element_by_xpath('//div[@class="shop-inner"]/h3[1]/a')
print(element.get_attribute('href'))
break
except:
js = 'window.scrollTo(0, {})'.format(i*500) # js語句
driver.execute_script(js) # 執(zhí)行js的方法
driver.quit()
知識點:掌握 手動實現(xiàn)頁面等待
6. selenium開啟無界面模式
絕大多數(shù)服務(wù)器是沒有界面的,selenium控制谷歌瀏覽器也是存在無界面模式的,這一小節(jié)我們就來學習如何開啟無界面模式(又稱之為無頭模式)
-
開啟無界面模式的方法
-
實例化配置對象
options = webdriver.ChromeOptions()
-
配置對象添加開啟無界面模式的命令
options.add_argument("--headless")
-
配置對象添加禁用gpu的命令
options.add_argument("--disable-gpu")
-
實例化帶有配置對象的driver對象
driver = webdriver.Chrome(chrome_options=options)
-
注意:macos中chrome瀏覽器59+版本,Linux中57+版本才能使用無界面模式!
- 參考代碼如下:
from selenium import webdriver
options = webdriver.ChromeOptions() # 創(chuàng)建一個配置對象
options.add_argument("--headless") # 開啟無界面模式
options.add_argument("--disable-gpu") # 禁用gpu
# options.set_headles() # 無界面模式的另外一種開啟方式
driver = webdriver.Chrome(chrome_options=options) # 實例化帶有配置的driver對象
driver.get('
print(driver.title)
driver.quit()
知識點:掌握 selenium開啟無界面模式
7. selenium使用ip
selenium控制瀏覽器也是可以使用ip的!
-
使用ip的方法
-
實例化配置對象
options = webdriver.ChromeOptions()
-
配置對象添加使用ip的命令
- `options.add_argument('--proxy-server=
-
實例化帶有配置對象的driver對象
driver = webdriver.Chrome('./chromedriver', chrome_options=options)
-
參考代碼如下:文章來源:http://www.zghlxwxcb.cn/news/detail-852770.html
from selenium import webdriver
options = webdriver.ChromeOptions() # 創(chuàng)建一個配置對象
options.add_argument('--proxy-server= # 使用ip
driver = webdriver.Chrome(chrome_options=options) # 實例化帶有配置的driver對象
driver.get('
print(driver.title)
driver.quit()
知識點:了解 selenium使用ip
8. selenium替換user-agent
selenium控制谷歌瀏覽器時,User-Agent默認是谷歌瀏覽器的,這一小節(jié)我們就來學習使用不同的User-Agent
-
替換user-agent的方法
-
實例化配置對象
options = webdriver.ChromeOptions()
-
配置對象添加替換UA的命令
options.add_argument('--user-agent=Mozilla/5.0 HAHA')
-
實例化帶有配置對象的driver對象
driver = webdriver.Chrome('./chromedriver', chrome_options=options)
-
參考代碼如下:
from selenium import webdriver
options = webdriver.ChromeOptions() # 創(chuàng)建一個配置對象
options.add_argument('--user-agent=Mozilla/5.0 HAHA') # 替換User-Agent
driver = webdriver.Chrome('./chromedriver', chrome_options=options)
driver.get('
print(driver.title)
driver.quit()
知識點:了解 selenium替換user-agent
反爬與反反爬
本階段課程主要學習爬蟲的反爬及應(yīng)對方法。文章來源地址http://www.zghlxwxcb.cn/news/detail-852770.html
未完待續(xù), 同學們請等待下一期
全套筆記資料代碼移步: 前往gitee倉庫查看
感興趣的小伙伴可以自取哦,歡迎大家點贊轉(zhuǎn)發(fā)~
到了這里,關(guān)于【爬蟲開發(fā)】爬蟲從0到1全知識md筆記第5篇:Selenium課程概要,selenium的其它使用方法【附代碼文檔】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!