python3 get爬取網頁標題、鏈接和鏈接的數字ID

1.使用requests庫請求網站

網頁請求方式:(1)get :最常見的方式,一般用於獲取或者查詢資源信息,也是大多數網站使用的方式,響應速度快。

                         (2)post:多以表單形式上傳參數,因此除了查詢信息外,還可以修改信息。

2.怎麼確定用什麼方式請求?

(1)打開網頁,用開發者模式,我的瀏覽器是360,圖示:


(2)任意複製一條首條新聞標題,粘貼到搜索框裏;


(3)開發者模式,依次點擊‘network’,‘XHR’找到翻譯數據,點擊Headers,請求爲get方式。圖示:



3.使用Beautiful soup解析網頁

(1)安裝bs

通過requests庫可以爬取到網頁源碼,接下來要從源碼中找到並提取數據;
Beautiful soup 是python 的一個庫,最主要的功能是從網頁中抓取數據。
Beautiful soup 目前已經被移植到bs4庫中,即導入Beautiful soup時需要先安裝bs4庫
bs4安裝:打開cmd:python -m pip install bs4

圖示:

(2)Beautiful soup 指定xlml解析器進行解析。 soup=BeautifulSoup(strhtml.text,'lxml')

(3)使用select(選擇器)定位數據,使用瀏覽器的開發者模式,將鼠標停留在對應數據位置並右擊,“審查元素“,開發者界面會有被選中部分,右擊  copy  ---> copy selector;   將路徑粘貼在文檔中,代碼如下:

#main > div > div.mtop.firstMod.clearfix > div.centerBox > ul.newsList > li:nth-child(1) > a

這是選中的第一條路徑,但我們要獲取所有的新聞頭條,因此將:li:nth-child(1)中冒號(包含冒號)後面的刪掉。如下:

#main > div > div.mtop.firstMod.clearfix > div.centerBox > ul.newsList > li > a

4.清洗和組織數據

for item in data:                    # soup匹配到的有多個數據,用for循環取出
    result = {
        'title': item.get_text(),     # 標籤在<a>標籤中,提取標籤的正文用get_text()方法
        'link': item.get('href'),  # 鏈接在<a>標籤的href中,提取標籤中的href屬性用get()方法,括號指定屬性數據
        'ID': re.findall('\d+', item.get('href'))    # 每一篇文章的鏈接都有一個數字ID。可以用正則表達式提取這個ID;\d  匹配數字; + 匹配前一個字符1次或者多次
    }

5.用正則表達式提取鏈接數字ID。python調用正則表達式使用re庫,不用安裝,可直接調用。

6.完整代碼如下:

"""
通過requests庫可以爬取到網頁源碼,接下來要從源碼中找到並提取數據;
Beautiful soup 是python 的一個庫,最主要的功能是從網頁中抓取數據。
Beautiful soup 目前已經被移植到bs4庫中,即導入Beautiful soup時需要先安裝bs4庫
bs4安裝:打開cmd:python -m pip install bs4
"""
import requests
from bs4 import BeautifulSoup
import re   # 在python中調用正則表達式用re庫,這個庫不用安裝,可直接調用
url = 'http://www.cntour.cn/'
strhtml = requests.get(url)  # 所有在源碼中的數據請求方式都是get
soup = BeautifulSoup(strhtml.text, 'lxml') # lxml解析器進行解析,解析之後的文檔保存到變量soup
 #print(soup)
# 使用soup.select引用這個路徑
data = soup.select('#main > div > div.mtop.firstMod.clearfix > div.centerBox > ul.newsList > li > a')
#print(data)
# 清洗和組織數據,完成上面的步驟只是獲得了一段目標HTML代碼,但沒有把數據提取出來
for item in data:                    # soup匹配到的有多個數據,用for循環取出
    result = {
        'title': item.get_text(),     # 標籤在<a>標籤中,提取標籤的正文用get_text()方法
        'link': item.get('href'),  # 鏈接在<a>標籤的href中,提取標籤中的href屬性用get()方法,括號指定屬性數據
        'ID': re.findall('\d+', item.get('href'))    # 每一篇文章的鏈接都有一個數字ID。可以用正則表達式提取這個ID;\d  匹配數字; + 匹配前一個字符1次或者多次
    }
    print(result)

7.結果如下:


本文是:學習《python3 爬蟲,數據清洗與可視化實戰 》第二章的學習筆記  


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