6分鐘 Python 爬蟲入門

一.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)

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章