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

數(shù)據(jù)采集工具

urllib庫(kù)

簡(jiǎn)介

它是python的標(biāo)準(zhǔn)庫(kù),提供了一系列用于操作url的功能,是模擬瀏覽器發(fā)送請(qǐng)求的庫(kù)

模塊

request:

常用方法

urlopen(url,data):向服務(wù)器發(fā)送請(qǐng)求

Request(url,headers):構(gòu)建請(qǐng)求頭信息

error

功能:urllib.error可以接收有urllib.request產(chǎn)生的異常。

常見(jiàn)類

URLError

1.網(wǎng)絡(luò)故障導(dǎo)致網(wǎng)絡(luò)不通

2.服務(wù)器連接失敗

3.找不到指定服務(wù)器

HTTPError

它是URLError的子類,當(dāng)這兩個(gè)同時(shí)捕獲異常的時(shí)候,必須把HTTPError寫(xiě)在URLError上面。

parse

簡(jiǎn)介

urllib中對(duì)url進(jìn)行解析的模塊

常用方法

urlencode(字典格式的數(shù)據(jù))

將字典格式的數(shù)據(jù)轉(zhuǎn)換成:key=value&key=value的格式

quote(url)

將中文轉(zhuǎn)化為%XXX的格式

unquote(url)

將%xxx格式轉(zhuǎn)化為中文

robotparse

urllib爬蟲(chóng)步驟

1.導(dǎo)入模塊 import urllib.request

2、使用urllib.request.urlopen(url)向服務(wù)器發(fā)送請(qǐng)求

3. 使用read()讀取網(wǎng)頁(yè)內(nèi)容(字節(jié)串),并通過(guò)decode()進(jìn)行轉(zhuǎn)碼(將字節(jié)串轉(zhuǎn)化為字符串)

實(shí)例:豆瓣中通過(guò)輸入關(guān)鍵字和編號(hào)來(lái)獲取部分?jǐn)?shù)據(jù)

get請(qǐng)求方式的步驟:

1.將url中?后的內(nèi)容進(jìn)刪除

2.將?后的數(shù)據(jù)分別提取屬性名和屬性值,并將其存放到字典中

3.使用urllib.parse.urlencode()將字典進(jìn)行轉(zhuǎn)碼

4.將url與轉(zhuǎn)碼后的內(nèi)容進(jìn)行拼接

5.用拼接后的url向服務(wù)器發(fā)送請(qǐng)求

實(shí)例:肯德基門店信息數(shù)據(jù)采集

post請(qǐng)求步驟

1.將參數(shù)存儲(chǔ)到字典中

2.使用urllib的解析模塊對(duì)字典數(shù)據(jù)進(jìn)行解析(注意:進(jìn)行encode()轉(zhuǎn)碼)

3.在urllib中urlopen()方法中將解析后的數(shù)據(jù)作為data參數(shù)的參數(shù)值。

擴(kuò)展知識(shí)

AJAX

簡(jiǎn)介:異步的javascript和XML

特點(diǎn):在不重復(fù)加載整個(gè)頁(yè)面的情況下,可以與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁(yè)內(nèi)容。

工作原理

請(qǐng)求方式

get方式

簡(jiǎn)單快捷,大部分情況都能使用,主要應(yīng)用在數(shù)據(jù)傳輸量少時(shí)。

post方式

1.無(wú)法使用緩存文件(更新服務(wù)器上的文件或數(shù)據(jù)庫(kù))

2.向服務(wù)器發(fā)送大量數(shù)據(jù)時(shí)使用(post方式無(wú)數(shù)據(jù)量限制)

3.當(dāng)發(fā)送未知字符時(shí)post方式比get方式穩(wěn)定。

JSON

簡(jiǎn)介:javascript對(duì)象表示法,是存儲(chǔ)和交換文本信息的語(yǔ)法

? ? ? ? 是輕量級(jí)的文本數(shù)據(jù)交換格式,使用javascript語(yǔ)法來(lái)

? ? ? ? 描述數(shù)據(jù)對(duì)象。

語(yǔ)法

1.對(duì)象在{ key:value}中定義

2.數(shù)據(jù)在[數(shù)據(jù) ]中定義

3.數(shù)據(jù)由逗號(hào)隔開(kāi)

4.數(shù)據(jù)在名稱/值對(duì)中。

python處理json字符串方法

1.導(dǎo)入json模塊:import json

2.調(diào)用該模塊的方法

json.dumps():將字典或列表格式轉(zhuǎn)化為json字符串

json.loads():將json字符串格式轉(zhuǎn)化為字典

json.dump():將字典或列表格式轉(zhuǎn)化為json字符串并寫(xiě)入文件中。

json.load():將json字符串格式轉(zhuǎn)化為字典并寫(xiě)入文件中

例:json.dump(dict,open("文件名",“打開(kāi)方式",編碼))

requests

簡(jiǎn)介

requests是python第三方庫(kù),是基于urllib基礎(chǔ)上編寫(xiě)的爬蟲(chóng)庫(kù)。

安裝方法

pip install requests

使用方法

1.導(dǎo)入模塊:import requests

2.使用get/post/put/head()方法向服務(wù)器發(fā)送請(qǐng)求

3.讀取網(wǎng)頁(yè)內(nèi)容

常用方法

requests.get(url,headers,params,data,cookies,proxies,verity,file,timeout,auth)

參數(shù)說(shuō)明:

url:向服務(wù)器發(fā)送請(qǐng)求的網(wǎng)址

headers:請(qǐng)求的頭信息

params:get請(qǐng)求參數(shù)

data:post請(qǐng)求參數(shù)

cookies:身份信息存儲(chǔ)

proxies:IP代理

verity:證書(shū)驗(yàn)證

file:文件上傳

timeout:設(shè)置超時(shí)時(shí)間

auth:指定用戶用戶名和密碼認(rèn)證登錄

響應(yīng)信息

r.text:以字符串格式獲取網(wǎng)頁(yè)內(nèi)容

r.content:以字節(jié)串格式獲取網(wǎng)頁(yè)內(nèi)容

r.url:返回請(qǐng)求url

r.stauts_code:獲取響應(yīng)狀態(tài)碼

200:請(qǐng)求成功

401:請(qǐng)求要求身份驗(yàn)證

404:找不到請(qǐng)求網(wǎng)頁(yè)

403:服務(wù)器拒絕訪問(wèn)

503:服務(wù)器關(guān)閉維修狀態(tài)

r.reason:獲取狀態(tài)碼返回的信息

r.encoding:返回編碼方式

r.cookies:獲取網(wǎng)頁(yè)的cookies

請(qǐng)求信息

r.request.url/headers/method(請(qǐng)求方法)/cookies

selenium

簡(jiǎn)介

selenium是python的第三方庫(kù),對(duì)外提供

接口可操作瀏覽器,完成瀏覽器的自動(dòng)化操作。

安裝

前期準(zhǔn)備

1.查看谷歌瀏覽器版本(右上角—幫助—版本)

子主題 1

2.查找與本機(jī)瀏覽器版本對(duì)應(yīng)的驅(qū)動(dòng)器版本

https://blog.csdn.net/huilan_same/article/details/51896672

3.下載谷歌驅(qū)動(dòng)器 chromedriver.exe

http://chromedriver.storage.googleapis.com/index.html

安裝

pip install selenium

基本操作

1.導(dǎo)入webdriver模塊

from selenium import webdriver

2.定義瀏覽器對(duì)象

browser = webdriver.Chorme(r'驅(qū)動(dòng)器路徑')

3.打開(kāi)瀏覽器

browser.get(url)

對(duì)html元素的獲取

1.find_element_by_id():根據(jù)id名獲取元素

2.find_element_by_class_name():根據(jù)class名獲取元素

3.find_element_by_name():通過(guò)name屬性名獲取元素

4.find_element_by_link_text():

通過(guò)超鏈接文本名稱獲取元素

5.find_element_by_partical_link_text():

通過(guò)部分鏈接文本獲取元素

6.find_element_by_tag_name():

通過(guò)標(biāo)簽名獲取元素

7.find_element_by_xpath():

通過(guò)xpath路徑獲取數(shù)據(jù)

8.find_element_by_css_selector():

通過(guò)css選擇器獲取元素

常用方法與屬性

方法

get():根據(jù)url打開(kāi)網(wǎng)頁(yè)

send_keys(“輸入文本”):向文本框中輸入數(shù)據(jù)

click():單擊選中元素

save_screenshot():將網(wǎng)頁(yè)保存成圖片存到外部文檔中

implicitly_wait():webdriver提供的一個(gè)隱性等待的時(shí)間,在一個(gè)時(shí)間段內(nèi)只能的等待,超時(shí)則拋出異常

屬性

page_source:獲取html文檔代碼

url:獲取網(wǎng)頁(yè)的url

title:獲取網(wǎng)頁(yè)的標(biāo)題

轉(zhuǎn)換問(wèn)題解決

switch_to.frame()

問(wèn)題描述:當(dāng)一個(gè)網(wǎng)頁(yè)中嵌入另一個(gè)獨(dú)立頁(yè)面時(shí),

需要切換到該獨(dú)立頁(yè)面才能獲取頁(yè)面元素。

解決方法:browser.switch_to.frame(id/name/xpath)

switch_to.window()

問(wèn)題描述:當(dāng)通過(guò)點(diǎn)擊超鏈接時(shí)打開(kāi)一個(gè)新窗口,如果獲取新窗口的元素時(shí),需要切換到該窗口。

解決方法:

1.獲取當(dāng)前窗口的窗口標(biāo)志(句柄)

s_window = browser.current_window_handle

2.獲取所有打開(kāi)窗口的句柄

all_windows = browser.window_handlers

3.遍歷所有窗口,判斷新打開(kāi)窗口不為之前窗口時(shí),切換到新窗口

for h in all_windows:

? ? if h != s_window:

? ? ? ? ? browser.switch_to.window(h)

常用屬性與方法

current_window_handle:獲得當(dāng)前窗口標(biāo)志(句柄)。

window_handles:返回所有窗口的句柄到當(dāng)前會(huì)話。

switch_to.window():用于切換到相應(yīng)的窗口

close():關(guān)閉當(dāng)前窗口

quit():關(guān)閉所有窗口

switch_to_alert()

問(wèn)題描述:當(dāng)通過(guò)觸發(fā)網(wǎng)頁(yè)元素彈出警告框alert()、prompt()、comfirm()時(shí),需要通過(guò)警告框

解決辦法:browser.switch_to_alert()

常用方法

accept():接受警告內(nèi)容,點(diǎn)擊確定按鈕

dismiss():解散現(xiàn)有警告框,點(diǎn)擊取消按鈕。

send_keys():向prompt()警告框中輸入內(nèi)容

操作鼠標(biāo)與鍵盤(pán)

操作鼠標(biāo)

1.導(dǎo)入ActionChains類

from selenium.webdriver.common.action_chains import ActionChains

2.創(chuàng)建該類的對(duì)象

action = ActionChains(browser)

3.調(diào)用該類中的方法對(duì)鼠標(biāo)進(jìn)行操作

格式:action.鼠標(biāo)操作方法

鼠標(biāo)點(diǎn)擊

click():?jiǎn)螕羰髽?biāo)左鍵

context_click():單擊鼠標(biāo)右鍵

double_click():雙擊鼠標(biāo)左鍵

click_and_hold():按住鼠標(biāo)左鍵

鼠標(biāo)移動(dòng)

move_to_element():將鼠標(biāo)移動(dòng)到指定元素

move_to_offset(x,y):按照偏移量移動(dòng)鼠標(biāo)

鼠標(biāo)拖拽

drag_and_drop(source,target):將元素從起點(diǎn)source移動(dòng)到終點(diǎn)target

drag_and_drop_by_offset(source,xoffset,yoffset):按照坐標(biāo)移動(dòng)

操作鍵盤(pán)

解決select標(biāo)簽問(wèn)題

1.導(dǎo)入Select類

from selenium.webdriver.support.select import Select

2.創(chuàng)建對(duì)象

s = Select(select元素)

3.調(diào)用方法選取下拉列表元素

select_by_index(index):根據(jù)index屬性定位選項(xiàng),index從0開(kāi)始

select_by_value(value):根據(jù)value屬性定位

select_by_visible_text(text):根據(jù)選項(xiàng)文本值來(lái)定位

first_selected_option():選擇第一個(gè)選項(xiàng)

scrapy

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容