天天看點

了解爬蟲原理

作業來源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2881

1. 簡單說明爬蟲原理

1:向伺服器發起請求

通過HTTP庫向目标站點發起請求,即發送一個Request,請求可以包含額外的headers等資訊,等待伺服器的響應。

2:擷取響應内容

如果伺服器正常響應,會得到一個Response,Response的内容便是所要擷取的頁面内容,類型可能有HTML、JSON、二進制檔案(如圖檔、視訊等類型)。

3:解析内容

得到的内容可能是HTML,可以用正規表達式、網頁解析庫進行解析。可能是JSON,可以直接轉成JOSN對象進行解析,可能是二進制資料,可以儲存或者進一步處理

4:儲存内容

儲存形式多樣,可以儲存成文本,也可以儲存至資料庫,或者儲存成特定格式的檔案。

2. 了解爬蟲開發過程

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

浏覽器工作原理的實質就是實作http協定的通訊,具體過程如下:

HTTP通信的流程,大體分為三個階段:

1、 連接配接 伺服器通過一個ServerSocket類對象對8000端口進行監聽,監聽到之後建立連接配接,打開一個socket虛拟檔案。

2、 請求 建立與建立socket連接配接相關的流對象後,浏覽器擷取請求,為GET請求,則從請求資訊中擷取所通路的HTML檔案名,向伺服器發送請求。

3、 應答 服務收到請求後,搜尋相關目錄檔案,若不存在,傳回錯誤資訊。若存在,則想html檔案,進行加HTTP頭等處理後響應給浏覽器,浏覽器解析html檔案,若其中還包含圖檔,視訊等請求,則浏覽器再次通路web伺服器,異常擷取圖檔視訊等,并對其進行組裝顯示出來。

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

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

運作代碼:

url='http://news.gzcc.cn/html/2019/xiaoyuanxinwen_0328/11086.html'
res = requests.get(url)
type(res)
res.encoding = 'utf-8'
res=res.text
res      

運作結果:

了解爬蟲原理

3).了解網頁

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

html_sample = ' \
<html> \
    <body> \
          <h1 id="title">Hello</h1> \
          <a href="#" class="link"> This is link1</a>\
          <a href="# link2" class="link" qao=123> This is link2</a>\
    </body> \
</html> '      

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

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

soups = BeautifulSoup(html_sample,'html.parser')      

select(選擇器)定位資料

a1 =soups.a
a = soups.select('a')      

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

h = soups.select('h1')
h      

運作截圖:

了解爬蟲原理

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

l = soups.select('.link')
l      
了解爬蟲原理

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

t = soups.select('#title')
t      
了解爬蟲原理

3.提取一篇校園新聞的标題、釋出時間、釋出機關、作者、點選次數、内容等資訊

如url = 'http://news.gzcc.cn/html/2019/xiaoyuanxinwen_0320/11029.html'

要求釋出時間為datetime類型,點選次數為數值型,其它是字元串類型。

  • 标題
soups = BeautifulSoup(res,'html.parser')
a1=soups.a
a=soups.select('.show-title')[0].text
a      
了解爬蟲原理
  • 釋出時間
dt =newsDate +' '+newsTime
dt


datetime.strptime(dt,'%Y-%m-%d %H:%M:%S')      
了解爬蟲原理
  • 作者

運作代碼

h=soups.select('.show-info')[0].text.split()[2]
h      
了解爬蟲原理
  • 釋出機關
h=soups.select('.show-info')[0].text.split()[4]
h      
了解爬蟲原理
  • 内容
t=soups.select('.show-content')[0].text
t      
了解爬蟲原理
  • 點選次數
url='http://oa.gzcc.cn/api.php?op=count&id=11086&modelid=80'
res = requests.get(url)
type(res)
res.text      
了解爬蟲原理