Python數(shù)據(jù)采集2

數(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

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容