準備工作
python3.7
requests(負責網(wǎng)絡請求)娘赴,lxml(負責解析響應的數(shù)據(jù)),chrome瀏覽器(定位要抓取的元素)跟啤。
安裝requests和lxml诽表。
進入命令行 執(zhí)行命令 pip install requests.pip install lxml
這里的pip是python的包管理工具,可以理解為手機里的應用市場腥光,你可以使用它下載安裝第三方包关顷。
我這里是已經(jīng)安裝好了,所以顯示requirement already satisfied武福。
爬取目標
學校官網(wǎng)的通知信息的標題(點擊上面標題就可以看到了)
先上代碼,自己手動敲一遍痘番,跑一下看看運行結果
import requests
from lxml import etree
#要下載的網(wǎng)頁網(wǎng)址
url = 'http://www16.zzu.edu.cn/msgs/vmsgisapi.dll/vmsglist?mtype=m&lan=101,102,103&tts=&tops=&pn=1'
#請求該網(wǎng)頁捉片,獲取返回結果
res = requests.get(url)
#將返回的結果解析成html
html = etree.HTML(res.content)
# 爬取所有標題節(jié)點
titles = html.xpath('//*[@id="bok_0"]/div[7]/div/a/span/text()')#定位標題節(jié)點
for title in titles:
print(title)
這里可以看出主要是分為三步:1,確定你要請求網(wǎng)頁的網(wǎng)址汞舱。2伍纫、定位你需要爬取的元素。3昂芜,存儲或打印你爬取得數(shù)據(jù)莹规。
比較關鍵得一點在于怎么定位你需要的元素,或者說怎么將你需要的數(shù)據(jù)泌神,從一個完整的網(wǎng)頁中篩選出來(即本例中通知的標題),在代碼中的體現(xiàn)如下良漱,
title = html.xpath('//*[@id="bok_0"]/div[7]/div/a/span/text()')#定位標題節(jié)點
這里簡單提一句xpath使用來定位元素的一種方式舞虱,根據(jù)的元素的層級關系來進行定位(網(wǎng)頁元素的結構就是層級的)。我們只需要搞明白怎么獲取//*[@id="bok_0"]/div[7]/div/a/span/text()就行了母市,這里需要用到chrome瀏覽器矾兜,我們訪問該網(wǎng)址看到結果如下
我們需要抓取的是通知的標題信息,點擊右鍵->檢查
然后在標題位置患久,點擊右鍵椅寺,復制-復制Xpath,得到xpath蒋失,//*[@id="bok_0"]/div[7]/div[19]/a/span
好像跟我們代碼中的xpath不太一樣返帕,主要在兩個地方div[19]和text()
1,div[19]是一個確定的值,我們需要爬取的是所有的標題篙挽,這里定位的div[19]下的那個標題溉旋,可以簡單理解為第十九個標題。所以我們將div[19]替換為div匹配所有的標題嫉髓。
2從上圖我們可以看出观腊,我們需要的是<span>標簽里面的文字,而xpath只定位到了span.多加text()使其匹配到所有標題的文本算行。
練習
爬取練習網(wǎng)頁的新聞標題