






數(shù)據(jù)采集工具
urllib庫
簡介
它是python的標準庫,提供了一系列用于操作url的功能,是模擬瀏覽器發(fā)送請求的庫
模塊
request:
常用方法
urlopen(url,data):向服務器發(fā)送請求
Request(url,headers):構建請求頭信息
error
功能:urllib.error可以接收有urllib.request產(chǎn)生的異常。
常見類
URLError
1.網(wǎng)絡故障導致網(wǎng)絡不通
2.服務器連接失敗
3.找不到指定服務器
HTTPError
它是URLError的子類,當這兩個同時捕獲異常的時候,必須把HTTPError寫在URLError上面。
parse
簡介
urllib中對url進行解析的模塊
常用方法
urlencode(字典格式的數(shù)據(jù))
將字典格式的數(shù)據(jù)轉換成:key=value&key=value的格式
quote(url)
將中文轉化為%XXX的格式
unquote(url)
將%xxx格式轉化為中文
robotparse
urllib爬蟲步驟
1.導入模塊 import urllib.request
2、使用urllib.request.urlopen(url)向服務器發(fā)送請求
3. 使用read()讀取網(wǎng)頁內容(字節(jié)串),并通過decode()進行轉碼(將字節(jié)串轉化為字符串)
實例:豆瓣中通過輸入關鍵字和編號來獲取部分數(shù)據(jù)
get請求方式的步驟:
1.將url中?后的內容進刪除
2.將?后的數(shù)據(jù)分別提取屬性名和屬性值,并將其存放到字典中
3.使用urllib.parse.urlencode()將字典進行轉碼
4.將url與轉碼后的內容進行拼接
5.用拼接后的url向服務器發(fā)送請求
實例:肯德基門店信息數(shù)據(jù)采集
post請求步驟
1.將參數(shù)存儲到字典中
2.使用urllib的解析模塊對字典數(shù)據(jù)進行解析(注意:進行encode()轉碼)
3.在urllib中urlopen()方法中將解析后的數(shù)據(jù)作為data參數(shù)的參數(shù)值。
擴展知識
AJAX
簡介:異步的javascript和XML
特點:在不重復加載整個頁面的情況下,可以與服務器交換數(shù)據(jù)并更新部分網(wǎng)頁內容。
工作原理
請求方式
get方式
簡單快捷,大部分情況都能使用,主要應用在數(shù)據(jù)傳輸量少時。
post方式
1.無法使用緩存文件(更新服務器上的文件或數(shù)據(jù)庫)
2.向服務器發(fā)送大量數(shù)據(jù)時使用(post方式無數(shù)據(jù)量限制)
3.當發(fā)送未知字符時post方式比get方式穩(wěn)定。
JSON
簡介:javascript對象表示法,是存儲和交換文本信息的語法
? ? ? ? 是輕量級的文本數(shù)據(jù)交換格式,使用javascript語法來
? ? ? ? 描述數(shù)據(jù)對象。
語法
1.對象在{ key:value}中定義
2.數(shù)據(jù)在[數(shù)據(jù) ]中定義
3.數(shù)據(jù)由逗號隔開
4.數(shù)據(jù)在名稱/值對中。
python處理json字符串方法
1.導入json模塊:import json
2.調用該模塊的方法
json.dumps():將字典或列表格式轉化為json字符串
json.loads():將json字符串格式轉化為字典
json.dump():將字典或列表格式轉化為json字符串并寫入文件中。
json.load():將json字符串格式轉化為字典并寫入文件中
例:json.dump(dict,open("文件名",“打開方式",編碼))
requests
簡介
requests是python第三方庫,是基于urllib基礎上編寫的爬蟲庫。
安裝方法
pip install requests
使用方法
1.導入模塊:import requests
2.使用get/post/put/head()方法向服務器發(fā)送請求
3.讀取網(wǎng)頁內容
常用方法
requests.get(url,headers,params,data,cookies,proxies,verity,file,timeout,auth)
參數(shù)說明:
url:向服務器發(fā)送請求的網(wǎng)址
headers:請求的頭信息
params:get請求參數(shù)
data:post請求參數(shù)
cookies:身份信息存儲
proxies:IP代理
verity:證書驗證
file:文件上傳
timeout:設置超時時間
auth:指定用戶用戶名和密碼認證登錄
響應信息
r.text:以字符串格式獲取網(wǎng)頁內容
r.content:以字節(jié)串格式獲取網(wǎng)頁內容
r.url:返回請求url
r.stauts_code:獲取響應狀態(tài)碼
200:請求成功
401:請求要求身份驗證
404:找不到請求網(wǎng)頁
403:服務器拒絕訪問
503:服務器關閉維修狀態(tài)
r.reason:獲取狀態(tài)碼返回的信息
r.encoding:返回編碼方式
r.cookies:獲取網(wǎng)頁的cookies
請求信息
r.request.url/headers/method(請求方法)/cookies
selenium
簡介
selenium是python的第三方庫,對外提供
接口可操作瀏覽器,完成瀏覽器的自動化操作。
安裝
前期準備
1.查看谷歌瀏覽器版本(右上角—幫助—版本)
子主題 1
2.查找與本機瀏覽器版本對應的驅動器版本
https://blog.csdn.net/huilan_same/article/details/51896672
3.下載谷歌驅動器 chromedriver.exe
http://chromedriver.storage.googleapis.com/index.html
安裝
pip install selenium
基本操作
1.導入webdriver模塊
from selenium import webdriver
2.定義瀏覽器對象
browser = webdriver.Chorme(r'驅動器路徑')
3.打開瀏覽器
browser.get(url)
對html元素的獲取
1.find_element_by_id():根據(jù)id名獲取元素
2.find_element_by_class_name():根據(jù)class名獲取元素
3.find_element_by_name():通過name屬性名獲取元素
4.find_element_by_link_text():
通過超鏈接文本名稱獲取元素
5.find_element_by_partical_link_text():
通過部分鏈接文本獲取元素
6.find_element_by_tag_name():
通過標簽名獲取元素
7.find_element_by_xpath():
通過xpath路徑獲取數(shù)據(jù)
8.find_element_by_css_selector():
通過css選擇器獲取元素
常用方法與屬性
方法
get():根據(jù)url打開網(wǎng)頁
send_keys(“輸入文本”):向文本框中輸入數(shù)據(jù)
click():單擊選中元素
save_screenshot():將網(wǎng)頁保存成圖片存到外部文檔中
implicitly_wait():webdriver提供的一個隱性等待的時間,在一個時間段內只能的等待,超時則拋出異常
屬性
page_source:獲取html文檔代碼
url:獲取網(wǎng)頁的url
title:獲取網(wǎng)頁的標題
轉換問題解決
switch_to.frame()
問題描述:當一個網(wǎng)頁中嵌入另一個獨立頁面時,
需要切換到該獨立頁面才能獲取頁面元素。
解決方法:browser.switch_to.frame(id/name/xpath)
switch_to.window()
問題描述:當通過點擊超鏈接時打開一個新窗口,如果獲取新窗口的元素時,需要切換到該窗口。
解決方法:
1.獲取當前窗口的窗口標志(句柄)
s_window = browser.current_window_handle
2.獲取所有打開窗口的句柄
all_windows = browser.window_handlers
3.遍歷所有窗口,判斷新打開窗口不為之前窗口時,切換到新窗口
for h in all_windows:
? ? if h != s_window:
? ? ? ? ? browser.switch_to.window(h)
常用屬性與方法
current_window_handle:獲得當前窗口標志(句柄)。
window_handles:返回所有窗口的句柄到當前會話。
switch_to.window():用于切換到相應的窗口
close():關閉當前窗口
quit():關閉所有窗口
switch_to_alert()
問題描述:當通過觸發(fā)網(wǎng)頁元素彈出警告框alert()、prompt()、comfirm()時,需要通過警告框
解決辦法:browser.switch_to_alert()
常用方法
accept():接受警告內容,點擊確定按鈕
dismiss():解散現(xiàn)有警告框,點擊取消按鈕。
send_keys():向prompt()警告框中輸入內容
操作鼠標與鍵盤
操作鼠標
1.導入ActionChains類
from selenium.webdriver.common.action_chains import ActionChains
2.創(chuàng)建該類的對象
action = ActionChains(browser)
3.調用該類中的方法對鼠標進行操作
格式:action.鼠標操作方法
鼠標點擊
click():單擊鼠標左鍵
context_click():單擊鼠標右鍵
double_click():雙擊鼠標左鍵
click_and_hold():按住鼠標左鍵
鼠標移動
move_to_element():將鼠標移動到指定元素
move_to_offset(x,y):按照偏移量移動鼠標
鼠標拖拽
drag_and_drop(source,target):將元素從起點source移動到終點target
drag_and_drop_by_offset(source,xoffset,yoffset):按照坐標移動
操作鍵盤
解決select標簽問題
1.導入Select類
from selenium.webdriver.support.select import Select
2.創(chuàng)建對象
s = Select(select元素)
3.調用方法選取下拉列表元素
select_by_index(index):根據(jù)index屬性定位選項,index從0開始
select_by_value(value):根據(jù)value屬性定位
select_by_visible_text(text):根據(jù)選項文本值來定位
first_selected_option():選擇第一個選項
scrapy