python爬虫企业级技术点_Python爬虫必备技术点(一)
爬蟲必備技術
面向具有Python基礎的Python爬蟲愛好者,urllib和requests兩個庫在實際的項目中應用也非常廣泛,不僅用于爬蟲技術也可以應用在API接口調用方面。如果需要相關的案例可以加我QQ(610039018),另外我在B站上已發布了相關的爬蟲視頻(https://www.bilibili.com/video/av93731419)。
一、urllib總結
核心的網絡請求庫 -> urllib
urllib.request 模塊
urlopen(url | request: Request, data=None) data是bytes類型
urlretrieve(url, filename) 下載url的資源到指定的文件
build_opener(*handlder) 構造瀏覽器對象
opener.open(url|request, data=None) 發起請求
Request 構造請求的類 url='https://www.baidu.com/s'
data={
'wd': '千鋒'
}
urlencode(data) # 結果轉成'wd=%f5%e6%e6%f5%e6%e6'
request = Request(url, data=urlencode(data).encode())
HTTPHandler HTTP協議請求處理器
ProxyHandler(proxies={‘http’: ‘http://proxy_ip:port’}) 代理處理
HTTPCookieProcessor(CookieJar())
http.cookiejar.CookieJar 類
urllib.parse模塊
quote(txt) 將中文字符串轉成url編碼
urlencode(query: dict) 將參數的字典轉成url編碼,結果是key=value&key=value形式,即以 application/x-www-form-urlencoded作為url編碼類型。
二、requests庫【重點】
requests庫也是一個網絡請求庫, 基于urllib和urllib3封裝的便捷使用的網絡請求庫。
2.1 安裝環境
pip install requests -i https://mirrors.aliyun.com/pypi/simple
2.2 核心的函數
requests.request() 所有請求方法的基本方法
以下是request()方法的參數說明
method: str 指定請求方法, GET, POST, PUT, DELETE
url: str 請求的資源接口(API),在RESTful規范中即是URI(統一資源標簽識符)
params: dict , 用于GET請求的查詢參數(Query String params);
data: dict , 用于POST/PUT/DELETE 請求的表單參數(Form Data)
json: dict 用于上傳json數據的參數, 封裝到body(請求體)中。請求頭的Content-Type默認設置為application/json
files: dict, 結構 {‘name’: file-like-object | tuple}, 如果是tuple, 則有三種情況:
(‘filename’, file-like-object)
(‘filename’, file-like-object, content_type)
(‘filename’, file-like-object, content_type, custom-headers)
指定files用于上傳文件, 一般使用post請求,默認請求頭的Content-Type為multipart/form-data類型。
headers/cookies : dict
proxies: dict , 設置代理
auth: tuple , 用于授權的用戶名和口令, 形式(‘username’, ‘pwd’)
requests.get() 發起GET請求, 查詢數據
可用參數:
url
params
json
headers/cookies/auth
requests.post() 發起POST請求, 上傳/添加數據
可用參數:
url
data/files
json
headers/cookies/auth
requests.put() 發起PUT請求, 修改或更新數據
requests.patch() HTTP冪等性的問題,可能會出現重復處理, 不建議使用。用于更新數據
requests.delete() 發起DELETE請求,刪除數據
2.3 requests.Respose
以上的請求方法返回的對象類型是Response, 對象常用的屬性如下:
status_code 響應狀態碼
url 請求的url
headers : dict 響應的頭, 相對于urllib的響應對象的getheaders(),但不包含cookie。
cookies: 可迭代的對象,元素是Cookie類對象(name, value, path)
text : 響應的文本信息
content: 響應的字節數據
encoding: 響應數據的編碼字符集, 如utf-8, gbk, gb2312
json(): 如果響應數據類型為application/json,則將響應的數據進行反序化成python的list或dict對象。
擴展-javascript的序列化和反序列化
JSON.stringify(obj) 序列化
JSON.parse(text) 反序列化
三、數據解析方式之xpath
xpath屬于xml/html解析數據的一種方式, 基于元素(Element)的樹形結構(Node > Element)。選擇某一元素時,根據元素的路徑選擇,如 /html/head/title獲取標簽。
3.1 絕對路徑
從根標簽開始,按tree結構依次向下查詢。
如 /html/body/table/tbody/tr。
3.2 相對路徑
相對路徑即是從當前某一個元素下開始查找,寫法如下
相對于整個文檔
//img
查找出文檔中所有的標簽元素
相對于當前節點
//table
假如當前節點是, 查找它的
的路徑的寫法
.//img
3.3 數據提取
提取文本
//title/text()
提取屬性
//img/@href
3.4 位置條件
獲取網頁中的數據類型與字符集, 獲取第一個標簽
//meta[1]//@content
獲取最后一個標簽
//meta[last()]//@content
獲取倒數第二個標簽
//meta[position()-2]//@content
獲取前三個標簽
//meta[position()<3]//@content
3.5 屬性條件
查找 class為circle-img的標簽
//img[@class="circle-img"]
3.6 在Python中應用
首先要安裝包pip install lxml,下面展示部分的代碼片斷:
from lxml import etree
root = etree.HTML('網頁的內容')
element = root.xpath('xpath查找路徑')
# element可能是兩種類型,一是List=>[, ...]
# 另一個是Element對象,下面是Element對象的方法或屬性
value = element.get('屬性名')
text = element.text # 獲取標簽中文本,如千鋒教育中的文本信息
children = element.xpath('相對xpath路徑') # 獲取它的子元素標簽
四、考一考
寫出urllib庫的請求處理器有哪些類(盡量寫全路徑)
寫出json.loads()和pickle.loads()返回的數據類型
寫出pymysql的cursor.execute()方法中的參數及作用
把你們的答案可以寫到評倫區,我會在后繼統一回復。
總結
以上是生活随笔為你收集整理的python爬虫企业级技术点_Python爬虫必备技术点(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vscode搜索文件_VS Code 新
- 下一篇: python基础入门大作业怎么做_【百度