天天看點

了解爬蟲原理

作業要求來自于https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2851

1. 簡單說明爬蟲原理

    通過程式模拟浏覽器請求站點的行為,把站點傳回的HTML代碼/JSON資料/二進制資料(圖檔、視訊) 爬到本地,進而提取自己需要的資料,存放起來使用。

2. 了解爬蟲開發過程

1).簡要說明浏覽器工作原理;

    浏覽器工作原理的實質就是實作http協定的通訊,就是向伺服器送出請求,在浏覽器視窗中展示想要通路的網絡資源。資源的位置由使用者使用 URI(統一資源标示符)指定。

2).使用 requests 庫抓取網站資料;

requests.get(url) 擷取校園新聞首頁html代碼

具體代碼如下:

了解爬蟲原理
了解爬蟲原理

import requests
from bs4 import BeautifulSoup
url='http://news.gzcc.cn/html/xiaoyuanxinwen/'
#網絡資源擷取
res=requests.get(url)
print(res.text)      

擷取html代碼

結果如下: 

了解爬蟲原理

3).了解網頁

寫一個簡單的html檔案,包含多個标簽,類,id

了解爬蟲原理
了解爬蟲原理
<body>
<div id="wrapper">
    <header id="header">
        <div class="content">
            <div class="inner">
                <h1>一 個 網 站</h1>
                <p>這是一個測試用的網站你可以跳轉到 <a href="https://www.baidu.com">百度</a> 看看<br>
                    當然也可以去 <a href="https://www.4399.com">4399小遊戲</a> 玩一玩</p>
            </div>
        </div>
        <nav class="use-middle">
            <ul>
                <li><a id="intro">Intro</a></li>
                <li><a id="work">Work</a></li>
                <li><a id="about">About</a></li>
                <li><a id="contact">Contact</a></li>
            </ul>
        </nav>
    </header>
</div>
</body>      

簡單html測試

 大概效果如下:

了解爬蟲原理

4).使用 Beautiful Soup 解析網頁;

通過BeautifulSoup(html_sample,'html.parser')把上述html檔案解析成DOM Tree

select(選擇器)定位資料

找出含有特定标簽的html元素

找出含有特定類名的html元素

找出含有特定id名的html元素

了解爬蟲原理
了解爬蟲原理
import requests
from bs4 import BeautifulSoup
with open(r'simpleHTML.html','r',encoding='utf-8') as f:
    text=f.read()
soup=BeautifulSoup(text,'html.parser')
#特定标簽的html元素
a=soup.select('li')[2].text
# 特定類名的html元素
b=soup.select('.inner')[0].text
# 特定id名的html元素
c=soup.select('#intro')[0].text
print(a,b,c)      

解析網頁

結果如下:

了解爬蟲原理

3.提取一篇校園新聞的标題、釋出時間、釋出機關

    具體代碼如下:

了解爬蟲原理
了解爬蟲原理
import requests
from bs4 import BeautifulSoup
url='http://news.gzcc.cn/html/2019/xiaoyuanxinwen_0320/11029.html'
#網絡資源擷取
res=requests.get(url)
res.encoding='utf-8'
# 解析成DOM Tree
soup=BeautifulSoup(res.text,'html.parser')
# 提取詳細資訊
t = soup.select('.show-title')[0].text
for news in soup.select('div'):
    if len(news.select('.show-title'))>0:
        t=news.select('.show-title')[0].text
        b=news.select('.show-info')[0].text
        print(t,b)
        break      

提取新聞

    結果如下:

了解爬蟲原理