1. 程式人生 > 其它 >20191317王鵬宇第四章學習筆記

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)

防盜鏈:當前請求的上一級