一.requests 庫
這是我們調用訪問網址的接口所在的庫
1.設置headers請求頭
import requests
url = 'https://www.lmonkey.com/'
# 定義頭部信息
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
res = requests.get(url=url)
code = res.status_code
print(res)
如果不設置headers請求頭,網站就會知道我們是一個python程序,從而不讓我們訪問(甚至會封禁我們的ip);設置請求頭就是將我們的python程序僞裝成一個瀏覽器。
2. get請求
光說大家肯定會暴躁,來看一段代碼
import requests
# 定義url
url_1 = 'https://www.baidu.com'
# 發生get請求
res = requests.get(url=url_1)
"""
# 獲取響應結果
print(res) #<Response [200]>
print(res.status_code) #請求狀態碼
print(res.content) #b'...' 二進制的文本流
print(res.content.decode('utf-8')) #把二進制文本流按指定編碼格式轉換爲字符串
print(res.text) #獲取響應的內容
print(res.url) #獲取請求的url地址
print(res.request.headers) #h獲取請求頭信息 request
print(res.headers) #響應頭信息 response
"""
這裏定義的 url_1 是我們要訪問的網址
res = requests.get(url=url_1) 是對我們定義的網址進行一次get請求,請求結果保存在res中。想這種就是模版,大家多寫幾次就記住了。
print(res.status_code) #請求狀態碼 ,是我們判斷訪問是否成功的標誌,輸出200證明返回成功,常見的失敗有404,405啥的,大家應該可以明白這個狀態碼是啥了。
3.post請求
import requests
u = 'https://fanyi.baidu.com/sug'
# 定義頭部信息
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
# POST發送的數據
data = {
'kw': '你好'
}
# 發送請求
res = requests.post(url=u, headers=headers, data=data)
# 接收返回數據
print(res.status_code)
# print(res.text)
data 是我們要給網站傳送的數據
4.在headers中設置cookie
有的網站的數據需要我們登錄才能獲取,這時候就要設置cookie了。
import requests
#這是我們想要訪問的網站內容
u = 'http://www.rrys2019.com/User/User'
# 定義頭部信息
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
#這是我們要設置登錄cookie的網址
loginurl = 'http://www.rrys2019.com/User/Login/ajaxLogin'
req = requests.session()
data = {
'account': '********', #你自己的賬號
'password': '********', #密碼
'remember': '1',
'url_back': 'http://www.rrys2019.com/User/User/'
}
# 發送請求
res = req.post(url=loginurl, headers=headers,data=data)
code = res.status_code
# print(code)
print(res.text)
下面教大家找到設置登錄cookie的網址
點擊登錄
找到需要post請求的網址,查看他的內容
發現傳遞的格式是 {accout:’’,password:’’,remember:’’,url_back:’’}
於是我們就要構造這種傳遞的方式
data = {
'account': '********', #你自己的賬號
'password': '********', #密碼
'remember': '1',
'url_back': 'http://www.rrys2019.com/User/User/'
}
這樣我們就設置好了登錄的cookie,可以獲取登錄後才能查看的內容了。
到這裏你已經學會了獲取網站的html的內容。可以自己去嘗試一下。https://www.lmonkey.com/users/wLndYGMEg
(可以去試試爬取這個網站的內容)
二. lxml庫 (學習使用xpath)
1.絕對路徑選擇
from lxml import etree
text = '''
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Spotlight</title>
<link rel="stylesheet" type="text/css" href="index2.css">
<script src="1.js">
</script>
</head>
<body>
<h1 data-spotlight="點擊kiki對你賣萌">點擊kiki對你賣萌</h1>
<div class="reno">
<div class="reno1"><img id="kiki" src="../images/k1.JPG" οnclick="changeImage()" style="width: 300px;"></div>
</div>
<div class="reno3">
<div class="reno3_1">許佳琪,1995年8月27日出生於浙江省,中國內地流行樂女歌手、影視演員,SNH48一期生,SNH48 Team SII成員,7SENSES成員 ,《青春有你第二季》訓練生。</div>
<div class="reno3_1">隊內職務: 門面擔當、舞蹈擔當、Rapper擔當</div>
<div><img src="../images/1.PNG" id="image" style="width: 600px; height: 400px;"></div>
<div class="bt">
<button id="next" class="bt1" οnclick="nextImage()">next</button>
<button id="prev" class="bt1" οnclick="prevImage()">prev</button>
</div>
</div>
</body>
</html>
'''
#解析html字符串
html = etree.HTML(text)
#提取數據
r = html.xpath('/html/body/h1/text()')
print(r)
#選擇第幾個
m = html.xpath('/html/body/div[2]/div[2]/text()')
print(m)
大家這麼聰明肯定看代碼就知道如何使用xpath了。值得一提的是xpath的下表是從1開始的。such as, div[1].
2.使用類名選擇
‘//div[@class=“reno3_1”] 是尋找所有div,再看看誰的’class’=‘reno3_1’。
'/text()'是獲取標籤內的內容
三.bs4 庫 (使用BeautifulSoup)
1.通過標籤獲取數據
from bs4 import BeautifulSoup
html_doc = """
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Spotlight</title>
<link rel="stylesheet" type="text/css" href="index2.css">
<script src="1.js">
</script>
</head>
<body>
<h1 data-spotlight="點擊kiki對你賣萌">點擊kiki對你賣萌</h1>
<div class="reno">
<div class="reno1"><img id="kiki" src="../images/k1.JPG" οnclick="changeImage()" style="width: 300px;"></div>
</div>
<div class="reno3">
<div class="reno3_1">許佳琪,1995年8月27日出生於浙江省,中國內地流行樂女歌手、影視演員,SNH48一期生,SNH48 Team SII成員,7SENSES成員 ,《青春有你第二季》訓練生。</div>
<div class="reno3_1">隊內職務: 門面擔當、舞蹈擔當、Rapper擔當</div>
<div><img src="../images/1.PNG" id="image" style="width: 600px; height: 400px;"></div>
<div class="bt">
<button id="next" class="bt1" οnclick="nextImage()">next</button>
<button id="prev" class="bt1" οnclick="prevImage()">prev</button>
</div>
</div>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, 'lxml')
# 1.通過tag標籤對象獲取文檔數據
# r = soup.link['type']
# r = soup.h1.text
# r = soup.h1.parent.name
print(r)
2.通過find函數查找
# 2.通過搜索獲取頁面中的元素 find find_all
#r = soup.find('button')
#r = soup.find_all('button',οnclick='nextImage()')
r = soup.find_all('title')
x = r.get_text()
# print(r)
3.通過css標籤選擇
# 3.css選擇器
# 通過標籤選擇元素;
# r = soup.select('title')
# print(r)
# 通過class,id 選擇;
# r = soup.select('.bt1')
# r = soup.select('#next')
# 通過空格 層級關係;逗號,並列關係
r = soup.select('a, title')
print(r)