-
上次在導(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的路徑找