ETH官方钱包

前往
大廳
主題

AI跨領(lǐng)域數(shù)據(jù)科學(xué) 課程紀(jì)錄 d16~17 資料探勘 (2) 資料收集與分析

傳說(shuō)中的巴哈魔法師~ | 2022-03-25 21:22:14 | 巴幣 0 | 人氣 168

-
上次在導(dǎo)入與導(dǎo)出資料到本機(jī)與連線(xiàn)網(wǎng)路
這次在爬網(wǎng) 觀(guān)察網(wǎng)頁(yè)程式碼 並偽裝正常使用者爬取指定資料
-
requests模組

讀取網(wǎng)站
在url裡面添加指令(以字串增加或字典增加) 更改url 爬網(wǎng)站
偽裝瀏覽器爬取網(wǎng)站(以高鐵網(wǎng)站為例)
填入cookies資料(以八卦版為例)

import requests

requests.get(url碼) 回傳對(duì)應(yīng)html碼
requests.get(url碼,params=自訂字典) url裡面添加字典
requests.post(url碼,data=自訂字典) 將表單資料放在封包進(jìn)行傳送

headers變數(shù)名稱(chēng)={'user-agent':'Mozilla/5.0'} 自定義標(biāo)頭 偽裝瀏覽器
html變數(shù)名稱(chēng)=requests.get(url,headers=headers變數(shù)名稱(chēng))

cookies變數(shù)名稱(chēng)={'over18':'1'} 填入cookies
html變數(shù)名稱(chēng)=requests.get(url,cookies=cookies變數(shù)名稱(chēng))

html變數(shù)名稱(chēng).text 文字檔案
html變數(shù)名稱(chēng).content 二進(jìn)位檔案資料
html變數(shù)名稱(chēng).status_code 狀態(tài)碼
requests.codes.ok 用來(lái)搭配if判斷是否有成功連線(xiàn)


-
BeautifulSoup模組
網(wǎng)頁(yè)解析
觀(guān)察網(wǎng)頁(yè)程式碼 取得指定資料(以彩券網(wǎng)為例)

去Anaconda Prompt (你的環(huán)境) 輸入
pip install -U beautifulsoup4
安裝最新版BeautifulSoup模組

import requests 讀取url需要使用
from bs4 import BeautifulSoup

html變數(shù)名稱(chēng).encoding=編碼名稱(chēng) 設(shè)定編碼方式

BeatifulSoup(html變數(shù)名稱(chēng).text,'html.parser') 使用python內(nèi)建的
BeatifulSoup(html變數(shù)名稱(chēng).text,'lxml') 使用專(zhuān)門(mén)處理的

sp名稱(chēng).各種HTML標(biāo)籤 (顯示內(nèi)容需要.text)
sp名稱(chēng).title 網(wǎng)頁(yè)標(biāo)題
sp名稱(chēng).h1 標(biāo)題
...

sp名稱(chēng).find(條件) 找第一個(gè)
sp名稱(chēng).find_all(條件) 找全部
 
sp名稱(chēng).select(條件) 使用CSS選擇器 以串列回傳
id讀取 前面加井號(hào)#
class讀取 前面加點(diǎn)號(hào).
 
python中變數(shù)名稱(chēng)若碰巧為保留字 則在字後加底線(xiàn)_
變數(shù).splitlines() 處理?yè)Q行
如htmllist變數(shù)名稱(chēng)=html變數(shù)名稱(chēng).text.splitlines() 搭配for if搜尋指定東西出現(xiàn)次數(shù)


-
re模組  
正規(guī)表達(dá)式  
以正規(guī)表達(dá)式搜尋資料(以自訂文章找信箱網(wǎng)址電話(huà)與中華電信網(wǎng)站找信箱為例)

import re  

re.match(r正規(guī)式,資料str) 在資料中找符合正規(guī)式的資料(只找第一個(gè)字)  
re.search(r正規(guī)式,資料str) 在資料中找符合正規(guī)式的資料(只找第一筆)  
re.findall(r正規(guī)式,資料str) 在資料中找符合正規(guī)式的資料(找全部) 回傳符合的串列  
r正規(guī)式 與 pattern  

規(guī)則名稱(chēng) = re.compile(r正規(guī)式)
符合正規(guī)式的資料 = 規(guī)則名稱(chēng).match(資料str) 好像沒(méi)有看過(guò)...?  
符合正規(guī)式的資料 = 規(guī)則名稱(chēng).search(資料str) 只找第一筆  
符合正規(guī)式的資料 = 規(guī)則名稱(chēng).findall(資料str) 找全部 回傳符合的串列  

符合正規(guī)式的資料.group() 符合的字串 沒(méi)有輸出None  
符合正規(guī)式的資料.start() 符合的字串開(kāi)始位置  
符合正規(guī)式的資料.end() 符合的字串結(jié)束位置  
符合正規(guī)式的資料.span() 符合的字串 (開(kāi)始位置,結(jié)束位置)  
搭配match/search  


-
Selenium模組  
瀏覽器自動(dòng)化操作 WebDriver  

去Anaconda Prompt (你的環(huán)境) 輸入  
pip install selenium  
安裝selenium 模組  

程式操作瀏覽器chrome需要下載ChromeDriver  

from selenium import webdriver  
from time import sleep  
(直接import time 就是time.sleep(數(shù)字) ) 可能類(lèi)似c++函式姓氏  

from selenium.webdriver.common.keys import Keys  

driver名稱(chēng)=webdriver.Chrome("chromedriver.exe的檔案位置")  
driver名稱(chēng).get(url網(wǎng)址') 不需要requests模組  

sleep(數(shù)字) 等待秒  

driver名稱(chēng).maximize_window() 最大化視窗  
?.get_window_position() 取得視窗左上角位置  
?.set_window_position(x,y) 設(shè)定視窗左上角位置  
?.get_window_size() 取得視窗寬度和高度  
?.set_window_size(x,y) 設(shè)定視窗寬度和高度  

?.refresh() 重新整理畫(huà)面  
?.back() 返回上一頁(yè)  
?.forward() 下一頁(yè)  
?.clear() 清除輸入內(nèi)容  

driver名稱(chēng).close() 關(guān)閉瀏覽器  
driver名稱(chēng).quit() 關(guān)閉瀏覽器 且退出驅(qū)動(dòng)程式  

driver名稱(chēng).find_element_by_class_name(...) 以類(lèi)別名稱(chēng)找  
driver名稱(chēng).find_element_by_name(...) 以名稱(chēng)找  
driver名稱(chēng).find_element_by_tag_name('title') 以HTML標(biāo)籤找  
driver名稱(chēng).find_element_by_id('author')  

tag名稱(chēng)=driver名稱(chēng).find_elements_by_tag_name('img') 查圖片  
tag名稱(chēng)[i].get_attribute('src')  
tag名稱(chēng)[i].tag_name  
tag名稱(chēng)[i].text  
多個(gè)同名 elements加S 回傳出串列 tag名稱(chēng)[i] cf.不加S只找第一個(gè)  


?.current_url 取得目前網(wǎng)址  
?.page_source 讀取網(wǎng)頁(yè)原始碼  
?.size 傳回元素大小(字典形式 {寬:???,高:???})  
 
tag名稱(chēng)=driver名稱(chēng).find_element_by_partial_link_text(...) 以部分連結(jié)文字找  
tag名稱(chēng)=driver名稱(chēng).find_element_by_link_text('認(rèn)識(shí)大同')  
tag名稱(chēng)名稱(chēng).click() 模擬點(diǎn)擊  

tag名稱(chēng).send_keys('王永慶') 模擬輸入資料  
tag名稱(chēng).submit() 送出表單  

tag名稱(chēng)=driver名稱(chēng).find_element_by_tag_name('body')  
tag名稱(chēng).send_keys(Keys.PAGE_DOWN)  
tag名稱(chēng).send_keys(Keys.END)  
tag名稱(chēng).send_keys(Keys.PAGE_UP)  
tag名稱(chēng).send_keys(Keys.HOME)  

tag名稱(chēng)=driver名稱(chēng).find_element_by_css_selector(...) 以CSS選擇器找  
tag名稱(chēng)=driver名稱(chēng).find_element_by_xpath(...) 以xml的路徑找  

創(chuàng)作回應(yīng)

傳說(shuō)中的巴哈魔法師~
累了 明天再說(shuō) 雖然明天也會(huì)上6小時(shí)也會(huì)有明天的份zz
2022-03-26 00:22:07
傳說(shuō)中的巴哈魔法師~
幹咧我決定明天開(kāi)始不做筆記全部截圖給他截下去 包準(zhǔn)不會(huì)錯(cuò)= = 不用像現(xiàn)在筆記要除錯(cuò) 自己想哪邊出錯(cuò)zz
2022-03-26 00:37:18
傳說(shuō)中的巴哈魔法師~
已補(bǔ)完
2022-03-29 02:29:48
追蹤 創(chuàng)作集

作者相關(guān)創(chuàng)作

相關(guān)創(chuàng)作

更多創(chuàng)作