20191317王鵬宇第四章學習筆記
爬蟲
通過編寫程式來獲取網際網路上的資源
需求:用程式模擬瀏覽器,輸入一個網址,從該網址中獲取到資源或者類容
用Python搞定以上需求
web請求過程
1伺服器渲染:在伺服器那邊直接把資料和html整合在一起,統一返回給瀏覽器
在頁面原始碼中能看到資料
2客戶端渲染:第一次請求只要一個html骨架,第二次請求拿到資料,進行資料展示
在頁面原始碼中,看不到資料
http協議
請求
請求行 請求方式(get/post) 請求url地址 協議
請求頭 放一些伺服器要使用的附加資訊
請求體 請求引數
響應
狀態行 協議 狀態碼
響應頭 放一些客戶端要使用的一些附加資訊
響應體 伺服器返回的真正客戶端要用的內容(html,json)
安裝requests
pip install requests
國內源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
post請求
requests.post(url=url,data=dat)
dat是一個字典
get請求
requests.get(url=url,params=param)
資料解析
re解析
bs4解析
xpath解析
正則語法:使用元字元進行排列組合用來匹配字串
常用元字元
. 匹配除換行符以外的任意字元
\w 匹配字母或數字或下劃線
\s 匹配任意的空白字元
\d 匹配數字
\n 匹配一個換行符
\t 匹配製表符
^ 匹配字串的開始
$ 匹配字串的結尾
\W 匹配非字母或者數字或下劃線
\D 匹配非數字
\S 匹配非空白符
a|b 匹配字元a或字元b
( ) 匹配括號內的表示式,也寶石一個組
[...] 匹配字元組中的字元
[^...] 匹配除了字元組中字元的所有字元
量詞:控制前面的元字元出現的次數
* 重複零次或更多次
+ 重複一次或更多次
? 重複零次或一次
{ n } 重複n次
{ n, } 重複n次或更多次
{ n,m } 重複n到m次
貪婪匹配和惰性匹配
.* 貪婪匹配
.*? 惰性匹配
爬蟲用的最多的是惰性匹配
re模組
1findall查詢所有,返回list
2search會進行匹配,返回match物件
但是如果匹配到了第一個結果,就會返回這個結果,
如果匹配不上search返回的則是None
3match只能從字串開頭進行匹配
4finditer和findall差不多,只不過這時返回的是迭代器
5預載入正則表示式
obj = re.compile(r'\d+')
6(?P<分組名字>正則) 可以單獨從正則匹配的內容中進一步提取內容
import requests
from bs4 import BeautfulSoup
url = 'http://www.baidu.com'
data = requests.get( url )
data.encoding = 'utf-8'
print( data.text )
main_page = BeautifulSoup( data.text, 'html.parser')
a_list = main_page.find( 'div',class='TypList').find_all( 'a' )
for iteam in a_list:
iteam.get('href')
xpath 是在xml文件中掃搜內容的一門語言
html是xml的一個子集
from lxml import etree
tree = etree.parse('b.html')
result = tree.xpath('/html/body/div/text()')
import requests
session = requests.session( )
data = {
'loginName' = 'username',
'password' = '123456'
}
url = 'http://www.baidu.com'
res = session.post( url, data = data)
防盜鏈:當前請求的上一級