天天看點

了解爬蟲原理

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

1. 簡單說明爬蟲原理

1、發起請求

使用http庫向目标站點發起請求,即發送一個Request

Request包含:請求頭、請求體等 

Request子產品缺陷:不能執行JS 和CSS 代碼

2、擷取響應内容

如果伺服器能正常響應,則會得到一個Response

Response包含:html,json,圖檔,視訊等

3、解析内容

解析html資料:正規表達式(RE子產品),第三方解析庫如Beautifulsoup,pyquery等

解析json資料:json子產品

解析二進制資料:以wb的方式寫入檔案

4、儲存資料

資料庫(MySQL,Mongdb、Redis)

檔案

2. 了解爬蟲開發過程

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

輸入url,發送請求,通過網絡連接配接,等待伺服器相應傳回資料,浏覽器出現界面

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

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

import requests
url='http://news.gzcc.cn/html/xiaoyuanxinwen/'
res=requests.get(url)
print(res.text)      

  

了解爬蟲原理

3).了解網頁

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

<body>
<div id="wrapper">
    <header id="header">
        <div class="content">
            <div class="inner">
                <h2>測試網站</h2>
                <p>這是一個測試用的網站你可以跳轉到
 <a href="https://www.baidu.com">百度</a> 看看<br>
                    當然也可以去 <a href="http://www.gzcc.cn">廣州商學院</a> 玩一玩</p>
            </div>
        </div>
        <nav class="use-middle">
            <ul>
                <li><a id="intro">123</a></li>
                <li><a id="work">3421</a></li>
                <li><a id="about">w(?Д?)w</a></li>
                <li><a id="contact">444444</a></li>
            </ul>
        </nav>
    </header>
</div>
</body>      

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

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

select(選擇器)定位資料

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

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

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

from bs4 import BeautifulSoup

simple = open(r'simpleHTML.html','r',encoding='utf-8')
simpleR = simple.read()
soup=BeautifulSoup(simpleR,'html.parser')
h=soup.select('h1')
id=soup.select('#from1')
cls=soup.select('.AD')
print(h,id,cls)      

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

url = 'https://www.bilibili.com/read/cv2335645?from=category_2'

import requests
from bs4 import BeautifulSoup

url ="https://www.bilibili.com/read/cv2335645?from=category_2"
res=requests.get(url)
type(res)
res.encoding="utf-8"
soup1=BeautifulSoup(res.text,'html.parser')
time=soup1.select('.create-time')
au=soup1.select('.author-name')
title=soup1.select('.title')
print(time,'\n',au,'\n' 'title')      
了解爬蟲原理