Python爬蟲系列 - 入門教學


本文來源於公眾號【程序猿聲】,作者周雲猛

大家好,我是新來的小編小周。今天給大家帶來的是python爬蟲入門,文章以簡為要,引導初學者快速上手爬蟲。話不多說,我們開始今天的內容。在初步學習爬蟲之前,我們先用一個例子來看看爬蟲是什么。

A同學想要了解python是一種怎樣的語言,於是打開了某度搜索引擎,卻發現占據屏幕的是各類python學習課程的廣告,而真正介紹python的內容卻被放在了后面。事實上,在大多數時候,我們用瀏覽器獲得的信息是十分繁冗的,因此篩選提取網頁中對我們有用的數據就顯得十分必要了。我們的爬蟲程序要做的便是:模擬瀏覽器發送請求-->獲取網頁代碼-->篩選提取數據-->存放數據

前期准備

爬蟲程序中需要用到一些第三方庫,我們這里使用的是requests庫和BeautifulSoup4庫。話不多說,讓我們先來做好這些准備。(筆者使用的是IDLE3.8版本編輯器,及win系統
requests 2.22.0下載地址:https://pypi.org/project/requests/#files BeautifulSoup4 4.8.2下載地址:https://pypi.org/project/beautifulsoup4/#files
python3.0以上版本一般自帶pip(可提供對第三方庫的下載安裝等),故第三方庫下載后可直接進行安裝。1. 打開cmd

2. 若python安裝在啟動盤(一般是C盤)直接鍵入“pip install   requests”命令即可。

3. 若python不在啟動盤則鍵入“d:”然后“cd python.exe所在目錄”,直接鍵入 ”python -m pip install requests”命令即可。

BeautifulSoup4庫安裝步驟相同)

發送請求

模擬瀏覽器發送請求時,我們可以使用requests庫幫助我們。下面給出requests庫的7個主要方法:

發送請求后,服務器會接受請求,並返回一個response

response作為一個對象,具有如下常用屬性:

接下來,我們以訪問百度主頁的代碼為例來看看吧!

import requests
url="http://www.baidu.com/"
res=requests.get(url)
print(res.status_code)
200

其中,我們介紹一下requests.get()函數的帶參數形式。params是字典或字節序列,可以添加到url中;****headers是HTTP的定制頭等等。我們以headers為例,headers是HTTP的定制頭,一些服務器在處理requests請求時會識別請求頭,並攔截python爬蟲。

import requests
url="http://www.zhihu.com/"
res=requests.get(url)
print(res.status_code)
400
print(res.request.headers)
{'User-Agent': 'python-requests/2.22.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

可以看到我們通過python訪問知乎首頁被攔截了,查看請求頭時發現User-agent是python—-requests/2.22.0。下面我們嘗試修改請求頭偽裝成瀏覽器:
image

import requests
pre={'User-agent':'Mozilla/5.0'}
res=requests.get("https://www.zhihu.com/billboard",headers=pre)
print(res.status_code)
200

可見,修改請求頭后訪問成功。利用requests的get方法和response的content屬性(圖片以二進制形式保存),我們可以下載網絡上的一些圖片,下面以獲取新浪新聞的一張圖片為例:

import requests
url="http://www.sinaimg.cn/dy/slidenews/5_img/2015_48/30939_1300019_688168.jpg"
path="D://pics//"+"maomi.jpg"
try:        
  res=requests.get(url)        
  with open(path,'wb') as pic:                
    pic.write(res.content)                
    pic.close()                
    print("文件保存成功")
  except:        
    print("爬取失敗")文件保存成功

解析內容

Beautiful Soup庫是解析、遍歷、維護文檔樹的功能庫。

簡單地說,BeautifulSoup能夠幫助用戶將response中的html內容解析,得到一個BeautifulSoup的對象,並且能夠以標准的縮進格式輸出。我們以知乎熱榜網頁為例(注意B和S要大寫哦):

import requests
from bs4 import BeautifulSoup
pre={'User-agent':'Mozilla/5.0'}
res=requests.get("https://www.zhihu.com/billboard",headers=pre)
rep=res.text
soup=BeautifulSoup(rep,"html.parser")
print(soup)

運行代碼后可以看見,已經產生標准縮進格式輸出。(截取部分如下圖)

這里,我們來認識一下BeautifulSoup類的部分元素:

在代碼運行返回的html內容中,可以看見a標簽里包含了

等子孫標簽,其中包含了我們需要的熱榜話題,利用這段代碼我們可以獲取熱榜第一的信息進而獲取榜單全部話題。

import requests
from bs4 import BeautifulSoup
pre={'User-agent':'Mozilla/5.0'}
try:
    res=requests.get("https://www.zhihu.com/billboard",headers=pre)
    res.raise_for_status
    rep=res.text
except:
    print("連接失敗")
try:
    soup=BeautifulSoup(rep,"html.parser")
    con=soup.find_all('div',class_="HotList-itemTitle")
    for i in range(len(con)):
        print(con[i].text)
except:
    print("獲取失敗")

我們觀察到所有熱榜話題所在標簽name都是div,屬性中都包含class="HotList- itemTitle"。我們使用bs4的find_all函數,返回一個包含許多元素的列表,然后利用text屬性提取有用的字符逐個輸出。

今天的爬蟲入門我們就先講到這里哦,小周下期繼續給大家帶來爬蟲分享哦!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM