python爬虫企业级技术点_Python爬虫必备技术点(二)
Python爬蟲必備技術點【續】
一、非爬蟲框架
1.1 爬蟲的認知
數據請求(網絡請求庫)
數據解析(re/xpath/bs4)
數據存儲(csv/pymysql/json??)
反反爬的策略
ip代理
ua池
cookie池: 收集手動登錄之后的響應的Cookie信息
請求間隔(2~5秒)
驗證碼處理(打碼平臺、機器學習???)
1.2 網絡請求庫
urllib
request
urlopen()
urlretrieve(fullurl, filename)
Request(url, data=None, headers)
build_opener(*handlers)
HTTPHandler
HTTPCookieProcessor(http.cookiejar.CookieJar())
ProxyHandler(proxies={})
parse
quote()
urlencode()
http.client.HTTPResponse
code
getheaders()
getheader(name, default)
read() 讀取的響應字節數據
requests (第三方)
request(method, url, params, data, json, files, headers, cookies, proxies, auth)
get(url, params, **kwargs)
post(url, data, json, **kwargs)
put(url, data, json, **kwargs)
delete(url, **kwargs)
Response
status_code
encoding
headers
content 字節數據
text 文本數據
json() json文本反序列化為Python的dict/list的對象
1.3 數據解析
re 正則表達式
xpath (pip install lxml)
lxml.etree.HTML(‘html內容’) 返回Element對象
xpath(‘path路徑’) 返回Element或List[,…]
text 標簽文本
get(‘標簽屬性’)
bs4 (pip install bs4)
from bs4 import BeautifulSoup
root = BeautifulSoup(html, ‘lxml’) bs4.element.Tag
查詢元素標簽的方法
find(‘標簽名’, class_, id_) 查找第一個
find_all(‘標簽名’, class_, id_, limit=N) 查找前N個
select(‘css選擇器’)
#id
.classname
標簽名
后代標簽
兄弟標簽 (查找多個標簽)
屬性標簽
偽類
Tag屬性
string/text
get_text()
attrs: dict 標簽中所有屬性的字典
contents 子標簽的文本列表
descendants 子標簽的Tag列表
1.4 多任務爬蟲
多線程
threading
Thread
queue.Queue 線程隊列
多進程
multiprocessing
Process
Queue 進程隊列
協程
asyncio
coroutine 協程裝飾器
get_event_loop()
wait()
sleep()
yield from
async / await
1.5 selenium框架
以driver程序驅動瀏覽器,對目標(網站或網頁)進行操作(請求網頁、提取數據、截圖、切換或關閉頁簽-window)。
chrome.get() 打開目標(發起請求)
chrome.quit() 退出瀏覽器
chrome.close() 關閉當前的窗口
chrome.find_element(By, value)
selenium.webdriver.common.by.By
ID
CLASS_NAME
NAME
XPATH
CSS_SELECTOR
LINK_TEXT
WebElement 查到的標簽對象
get_attribute(‘屬性名’, default)
text 標簽文本
click()
send_keys()
rect 當前元素的位置(left, top, width, height)
chrome.find_elements(By, value)
execute_script()
save_screenshot(filename) 截圖
等待某一個標簽元素出現
selenium.webdriver.support
ui
WebDriverWait
expected_conditions
visibility_of_all_elements_located((By, value))
ui.WebDriverWait(dirver, timeout) \
.until(expected_conditions, error_msg )
1.6 docker
容器技術,將遠程的docker倉庫中的鏡像下拉到本地, 再將鏡像運行成為一個容器(進程)。
- 鏡像操作
- 基本信息
- 名稱
- 版本
- ID
- 描述
- docker images 查看所有鏡像
- docker rmi 名稱:版本號 / ID 刪除鏡像
- docker run 名稱:版本號 / ID 啟動鏡像
- -dit 后臺啟動鏡像,啟動后可進入容器并打開新的terminal(終端)
- -p 宿主機端口: 容器端口
- 容器操作
- docker ps 查看正運行的容器
- -a 查看所有的容器
- -l 查看最后一個啟動的容器
- docker logs 容器名或ID? 查看容器運行的日志
- docker exec 容器名或ID Linux命令 在容器中執行Linux命令
- docker exec -it 容器名或ID bash 進入容器
- docker stop 容器名或ID
- docker start 容器名或ID
- docker restart 容器名或ID
- docker rm -f 容器名或ID 刪除容器, -f強制刪除正運行的容器
二、日志模塊進階
2.1 日志格式
格式 ?? ?說明
%(name)s ?? ?記錄器的名稱, 默認為root
%(levelno)s ?? ?數字形式的日志記錄級別
%(levelname)s ?? ?日志記錄級別的文本名稱
%(filename)s ?? ?執行日志記錄調用的源文件的文件名稱
%(pathname)s ?? ?執行日志記錄調用的源文件的路徑名稱
%(funcName)s ?? ?執行日志記錄調用的函數名稱
%(module)s ?? ?執行日志記錄調用的模塊名稱
%(lineno)s ?? ?執行日志記錄調用的行號
%(created)s ?? ?執行日志記錄的時間
%(asctime)s ?? ?日期和時間
%(msecs)s ?? ?毫秒部分
%(thread)d ?? ?線程ID
%(threadName)s ?? ?線程名稱
%(process)d ?? ?進程ID
%(message)s ?? ?記錄的消息
2.2 日志模塊應用
import logging
from logging import StreamHandler, FileHandler
四個核心部分
日志記錄器logger: 記錄日志信息
日志處理器 handler: 記錄信息之后,由handler去處理
日志過濾器 filter: 對記錄信息進行過濾。
日志格式化 formatter: 由處理器對記錄的信息按formatter格式進行處理(除HTTPHandler和SMTPHandler之外)。
核心方法或函數
logging.getLogger(name) # 默認沒有name時,返回root
logging.baseConfig() 配置root記錄器的格式、處理器等。
logging.info()/debug()/warning()/error()/critical() 由root記錄器記錄日志信息。
logger記錄器的核心方法
setLevel(logging.DEBUG|INFO|WARNING|ERROR|FATAL)
addHandler(handler)
addFilter(Filter)
debug()|info()….
handler處理器的核心方法
setLevel(logging.DEBUG|INFO|WARNING|ERROR|FATAL)
setFormatter(fmt)
Formatter初始化參數
format 格式化的字符串, 使用%(日志變量)s 相關日志變量占位符組成的字符串
'hi, %(name)s, age is %(age)s' % {'age': 20, 'name': 'jack'}
'hi, %s, age is %s' % ('disen', 30)
datefmt 指定 %(asctime)s 日志時間的格式, 通常使用 %Y-%m-%d %H:%M:%S 即年月日 時分秒格式。
三、scrapy框架
3.1 scrapy架構組成
五個核心組件
engine 引擎, 協調其它四個組件之間的聯系,即與其它四個組件進行通信,也是scrapy框架的核心。
spider 爬蟲類, 爬蟲程序的編寫代碼所在, 也是發起請求的開始的位置。spider發起的請求,經過engine轉入到scheduler中。
scheduler 調度器, 調度所有的請求(優先級高,則會先執行)。當執行某一個請求時,由engine轉入到downloader中。
donwloader 下載器, 實現請求任務的執行,從網絡上請求數據,將請求到的數據封裝成響應對象,并將響應的對象返回給engine。engine將數據響應的數據對象(以回調接口方式)回傳給它的爬蟲類對象進行解析。
itempipeline 數據管道, 當spider解析完成后,將數據經engine轉入到此(數據管道)。再根據數據類型,進行數據處理(圖片、文本)
二個中間件
爬蟲中間件, 介于Spider和Engine之間的,可以攔截Spider的發起的請求及數據。
下載中間件,介于Engine和Downloader之間的,可以攔截下載和響應。當然在下載處理之前,可以設置代理 、請求頭、Cookie等操作(反反爬設置),還可以基于Splash或Selenium實現特定的操作。
3.2 scrapy指令
創建項目命令
scrapy startproject 項目名稱
創建爬蟲命令
scrapy genspider 爬蟲名 域名
啟動爬蟲命令
scrapy crawl 爬蟲名
調試爬蟲命令
scrapy shell url
scrapy shell
fetch(url)
view(response)
response.xpath()
3.3 Response類
屬性相關【重點】
body 響應的字節數據
text 響應的編碼之后文本數據
headers 響應頭信息, 是字節數據
encoding 響應數據的編碼字符集
status 響應的狀態碼
url 請求的url
request 請求對象
meta 元數據,用于request和callback回調函數之間傳值
解析相關【重點】
selector()
css() 樣式選擇器 , 返回Selector選擇器的可迭代(列表)對象
scrapy.selector.SelectorList 選擇器列表
x()/xpath()
scrapy.selector.Selector 選擇器
樣式選擇器提取屬性或文本
::text 提取文本
::attr(“屬性名”) 提取屬性
xpath() xpath路徑
xpath路徑,同lxml的xpath()寫法
選擇器常用方法
css()/xpath()
extract() 提取選擇中所有內容,返回是list
extract_first()/get() 提取每個選擇器中的內容, 返回是文本
3.4 Request類
scrapy.http.Request
請求對象的屬性
url
callback 解釋數據的回調函數對象
headers 請求頭
priority 請求的優先級, 值越高,優先級越高(優先下載)
四、擴展練習
寫出selenium向下和向右滾動的腳本
document.documentElement.scrollTop 向下
document.documentElement.scrollLeft 向右
1
2
寫出restful接口設計規范(四個)
- 每個資源都有唯一標識 URI
- 每個資源具有四個動作, GET|POST|PUT|DELETE
- 每次請求都是無狀態
- 接口交互的數據是json或xml
寫出常見的反爬蟲和反反爬蟲
- 訪問次數 - IP代理
- Cookie驗證- Cookie池
- UA驗證? - UA池
- 驗證碼 - 打碼平臺
- 動態js渲染 - Selenium/Splash
————————————————
版權聲明:本文為CSDN博主「Python-Disen」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/ahhqdyh/article/details/104832423
總結
以上是生活随笔為你收集整理的python爬虫企业级技术点_Python爬虫必备技术点(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: invalidate(true) 图形不
 - 下一篇: sql having是什么意思_sql之