Python爬蟲教學(寫給入門的新手) 一

前言

  剛學完python基礎,想學習爬蟲的新手,這裏有你想要的東西。
  本文着重點在於教新手如何學習爬蟲,而且會之外行人的思惟進行形象地講解。最近我一兄弟想學,我就想寫個教學給他,而後想不如分享到網絡上,給熱愛學習的人們一塊兒學習探討。各位大神路過,如發現文章中有不妥之處,敬請指出,畢竟我最近剛開始學會撰寫技術文章。css

環境安裝

python3.7.1html

pip install requests
pip install beautifulsoup4
pip install lxml

技術講解

requests庫

  requests通常用於發起http請求,而且拿到請求的結果。http經常使用的請求有兩種,GET和POST,爬蟲主要用的是GET請求。
  在不懂http,https和dns,TCP/IP等協議的狀況下,我直接打個比方來解釋一下什麼是GET請求,以360瀏覽器爲例,人在360瀏覽器輸入www.baidu.com,而後敲擊enter鍵,直到頁面出現,整個過程,咱們能夠抽象爲咱們向百度服務器發起的一次GET請求。
  更專業,更詳細的解釋,本身去百度學習吧。
  如何使用requests庫來模擬瀏覽器的行爲來獲取頁面內容呢?
示例代碼以下python

import requests
web = requests.get('https://www.baidu.com')  #向百度發起一次get請求,返回請求結果的實體類
print(web.status_code)    #請求返回的狀態碼,200是OK,404是頁面不存在,500是錯誤,更多本身百度搜索
print(type(web.content))    #頁面內容的數據類型是bytes,所以須要解碼
print(type(web.content.decode()))
print(web.content.decode())    #解碼以後,獲得的頁面內容是結構化的字符串

輸出以下web

clipboard.png
  這樣看起來,咱們獲取到的頁面內容不是咱們在瀏覽器看到的圖形化界面,而是字符串,更像是一些代碼。若是你學過html和css那就不用多說了。沒學過也沒關係,如今能夠簡單學一下,也就花幾分鐘瞭解一下就夠用了。
  html是一種標記語言,能夠被瀏覽器執行,而後呈現出可視化的圖形界面。若是你把web.content.decode()這一串字符串保存在test.html裏,而後雙擊打開,你會看到圖形化界面的,只不過有些圖片可能顯示不了,這裏就不細說了。
  html其實很好理解,不要想得太複雜,就是一段有規律的格式化的文本。
  其基本格式就是數組

<html>
<head>...</head>
<body>...<body>
<script>...</script>
<style>...</style>
</html>

  html文本的標籤通常都是成雙成對,善始善終的,好比<body>和</body>是一隊,千萬不能拆散,拆散就亂套了。少數除外好比<br>是換行用的,能夠不用配對。
這裏咱們主要講body標籤,網頁的主要內容都是在這個標籤裏顯示的,好比標題,段落,圖片等
在test.html裏咱們寫入一下代碼而且保存。瀏覽器

<html>
<body>
<h1>個人網站</h1>
<p>這是個人網站</p>
</body>
</html>

效果就是服務器

clipboard.png
html更多標籤所表明的意義能夠去這裏學習http://www.runoob.com/html/ht...網絡

beautifulsoup4庫

  bs4(簡稱)庫是用於解析格式化文本,提取數據用的庫。
咱們利用requests庫的get函數拿到網頁的內容是一段格式化的字符串,接下來就能夠用bs4來解析它。
解析的示例代碼以下函數

from bs4 import BeautifulSoup
html = '''<html>
<body>
<h1>個人網站</h1>
<p>這是個人網站</p>
<body>
</html>'''    #從網頁拿到html的格式化的字符串,保存到html裏
soup = BeautifulSoup(html, 'lxml')    #使用lxml解析器來解析文本,html和xml格式是相似的
print(soup.find_all('h1'))    #使用find_all函數來找全部的h1標籤,返回的結果是數組
print(soup.find_all('p'))    #找全部的p標籤,返回的結果是數組

運行結果如圖學習

clipboard.png

更復雜一點的,好比

from bs4 import BeautifulSoup
html = '''<html>
<body>
<h1>個人網站</h1>
<p>這是個人網站</p>
<div class='test-item'>
測試1
</div>
<div class='test-item'>
測試2
</div>
<body>
</html>'''
soup = BeautifulSoup(html, 'lxml')
div_tags = soup.find_all(name='div', attrs={'class': 'test-item'})
for tag in div_tags:
    print(type(tag))
    print(tag)
    print(tag.string)
    print(tag.attrs, '\n')

運行結果是

clipboard.png
  注意,tag保存的不是字符串,而是bs4模塊中的一個標籤實體類,咱們主要須要知道它的attrs屬性和string屬性,方便咱們拿到一些咱們想要的文本和信息,好比a標籤的href屬性就保存在attrs裏。

總結

  本文主要講了如何使用requests獲取網頁文本內容,以及如何解析html文本,更多更好用的爬蟲庫,下節課看狀況再講。

相關文章
相關標籤/搜索