日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python爬虫企业级技术点_Python爬虫必备技术点(二)

發布時間:2025/3/15 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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爬虫必备技术点(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。