天天看點

了解爬蟲原理

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

1. 簡單說明爬蟲原理

  • 向伺服器發起請求

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

  • 擷取響應内容

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

  • 解析内容

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

  • 儲存内容

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

  • 簡要流程如下圖所示
了解爬蟲原理

2. 了解爬蟲開發過程

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

使用者将自己的資訊通過浏覽器發送給伺服器

#Response:伺服器接收請求,分析使用者發來的請求資訊,然後傳回資料(傳回的資料中可能包含其他連結,如:圖檔,js,css等)

#ps:浏覽器在接收Response後,會解析其内容來顯示給使用者,而爬蟲程式在模拟浏覽器發送請求然後接收Response後,是要提取其中的有用資料。      
了解爬蟲原理

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

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

import requests
from bs4 import BeautifulSoup
url='http://news.gzcc.cn/html/xiaoyuanxinwen/'
res=requests.get(url)#擷取校園新聞網中的内容
type(res)
res.encoding='utf-8'#改變顯示的編碼格式,避免亂碼的産生
res.text#以文本的形式輸出所爬取到的内容      

運作結果:

了解爬蟲原理

3).了解網頁

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

html_sample = ' \
<html> \
 <body> \
  <h1 id="title">HTML</h1> \
  <a href=" " class="link"> This is 簡單的html代碼</a >\
  <a href="# link2" class="link" qao=123> This is 另一個link</a >\
 </body> \
</html> '      

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

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

soup = BeautifulSoup(res.text,'html.parser')#把上述html檔案解析成DOM Tree      
了解爬蟲原理

select(選擇器)定位資料

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

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

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

# 找出标簽為‘h1’的HTML元素,傳回list
print(soup.select('h1')[0].text)
#  找出類名為‘link’的HTML元素
for i in range(len(soup.select('.link'))):
    print(soup.select('.link')[i].text)
# 找出含有特定id名的html元素
print(soup.select('#tbxpwd1')[0].text)      

 運作結果:

了解爬蟲原理

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

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

此處選擇的是校園新聞的其中一片url=http://news.gzcc.cn/html/2019/xiaoyuanxinwen_0313/10979.html

for news in soup.select('li'):#對找到的清單進行周遊處理
    if len(news.select('.show-title'))>0:
        t=news.select('.show-title')[0].text#提取詳細的資訊,此處選取的是第一條清單的标題,連結網址,和釋出機關與釋出時間
        a=news.select('a')[0]['href']
        d=news.select('.show-info')[0].text
print(t,a,d)      

運作結果:如要求所示的輸出了新聞的标題、釋出時間、和釋出機關

了解爬蟲原理