Pyhon網路爬蟲學習筆記—抓取本地網頁(一)
如何用Python爬取本地網頁
一、寫出一個簡單的靜態網頁,下面是我隨便寫的一個
網頁原始碼如下
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>大阿瓦達</title> <Link rel="stylesheet" type="text/css" href="main.css"> </head> <body> <div class="header"> <body background="image/2.png" style=" background-repeat:no-repeat ; background-size:100% 100%; background-attachment: fixed;"></body> </div> > <ul class="nav"> <li><a href="#">Home</a></li> <li><a href="#">Site</a></li> <li><a href="#">Other</a></li> </ul> </div> <div class="main-content"> <h2>Aritcle</h2> <ul class="article"> <li> <img src="image/3.jpg" width="100" height="=90"> <h3>The bath</h3> <p>Say sonmething</p> </li> <li><img src="image/4.png" width="100" height="=90"> <h3>The bath</h3> <p>Say sonmething</p> </li> </ul> </div> <div class="footer"> <center><p>©mydadadaw</p> </center> </div> </body> </html>
由於是靜態網頁,我用的是絕對路徑 ,我就直接存放在桌面的目錄裡: C:\Users\偉\Desktop\網頁作業\另一個網頁作業\11.html
二、解析網頁
第一步:使用BeautifulSoup 解析網頁(這個庫是python自帶的)
Soup = BeautigulSoup(html,’lxml’)
(PS:lxml為解析網頁所需要的庫,在python中這個庫是沒有的,所以我們需要進入cmd 進行自主安裝“pip install lxml”,這裡我會在後面在介紹另外四種解析網頁庫,分別是:”html parser”,”lxml HTML”, ”lxml xml”, ”html 51ib”)
第二步:掃描抓取的東西在哪
資源 = Soup.select(‘???’)
第三步:從標籤中獲得你要的information(資訊)
<p>Something</p>(網頁的段落標籤)tittle = Something
rate = 4.0
BeautifulSoup => CSS Select:
一個網頁的基本結構
Xpath與CSS解析網頁的比較
Xpath:誰,在哪,哪幾個 (之後再講)
CSS Select:誰在哪,第幾個,長什麼樣(我們接下來的爬蟲就主要用copy selector找我們需要的內容)
三、寫Python程式碼來爬取我們寫的網頁
這四行程式碼就可以實現我們網頁的爬取
from bs4 import BeautifulSoup
with open('/Users/偉/Desktop/網頁作業/另一個網頁作業/11.html','r') as wb_data:
Soup = BeautifulSoup(wb_data,'lxml')
print(Soup)
'''
這裡 第行的語句的意思是開啟我們這個目錄下的這個網頁檔案,r代表只讀
'''
這樣就把我們整個網頁的資料抓取過來了,但是結果並不是我們想要的
我們要將爬取的網頁進行分析
還是點開我們寫的網頁,抓取我們需要的圖片
找到圖片img這一行,然後右鍵,copy,找到,copy selector
body > div.main-content > ul > li:nth-child(1) > img,這就是我們所需要抓取的圖片的程式碼
images = Soup.select('body > div.main-content > ul > li:nth-child(1) > img')
放進pycharm(Python編輯器)中進行抓取
後面再列印我們所抓取的圖片資訊
print(images)
但我們放進python中,它會報錯,因為我們沒有按照他的格式進行
因此,我們要將程式碼
紅色的部分刪除,就可以得到這一類圖片的資訊
這裡和我們加上的兩個圖片完全一致
然後我們在抓取我們需要的其他資訊,附上全部程式碼
from bs4 import BeautifulSoup
with open('/Users/偉/Desktop/網頁作業/另一個網頁作業/11.html','r') as wb_data:
Soup = BeautifulSoup(wb_data,'lxml')
images = Soup.select('body > div.main-content > ul > li > img')
p = Soup.select('body > div.main-content > ul > li > p')
tittle = Soup.select('body > div.main-content > ul > li > h3')
print(images,p,tittle,sep='\n-----\n')
這就是我們抓取到的資訊
[<img height="=90" src="image/3.jpg" width="100"/>, <img height="=90" src="image/4.png" width="100"/>]
-----
[<p>Say sonmething</p>, <p>Say sonmething</p>]
-----
[<h3>The bath</h3>, <h3>The bath</h3>]
雖然,這裡抓取到的東西還是會有網頁的程式碼,所以我們要對內容進行篩選
在程式碼中加上判斷結構即可得到我們所需要的內容
如有補充,我會在後續加上