Python爬蟲系列(一)入門教學(xué)
“啟? ?大家好,我是新來的小編小周。今天給大家?guī)淼氖莗ython爬蟲入門,文章以簡為要,引導(dǎo)初學(xué)者快速上手爬蟲。話不多說,我們開始今天的內(nèi)容。
在初步學(xué)習(xí)爬蟲之前,我們先用一個例子來看看爬蟲是什么。
A同學(xué)想要了解python是一種怎樣的語言,于是打開了某度搜索引擎,卻發(fā)現(xiàn)占據(jù)屏幕的是各類python學(xué)習(xí)課程的廣告,而真正介紹python的內(nèi)容卻被放在了后面。
事實上,在大多數(shù)時候,我們用瀏覽器獲得的信息是十分繁冗的,因此篩選提取網(wǎng)頁中對我們有用的數(shù)據(jù)就顯得十分必要了。
我們的爬蟲程序要做的便是:模擬瀏覽器發(fā)送請求-->獲取網(wǎng)頁代碼-->篩選提取數(shù)據(jù)-->存放數(shù)據(jù)。
~前期準(zhǔn)備~
爬蟲程序中需要用到一些第三方庫,我們這里使用的是requests庫和BeautifulSoup4庫。話不多說,讓我們先來做好這些準(zhǔn)備。(筆者使用的是IDLE3.8版本編輯器,及win系統(tǒng))
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”命令即可。


~發(fā)送請求~
模擬瀏覽器發(fā)送請求時,我們可以使用requests庫幫助我們。下面給出requests庫的7個主要方法:
| requests.request() | 構(gòu)造一個請求,支撐以下各方法的基礎(chǔ)方法 |
| requests.get() | 獲取HTML網(wǎng)頁的主要方法,對應(yīng)HTTP的GET |
| requests.head() | 獲取HTML網(wǎng)頁頭信息的方法,對應(yīng)HTTP的HEAD |
| requests.post() | 向HTML網(wǎng)頁提交POST請求方法,對應(yīng)HTTP的POST |
| requests.put() | 向HTML網(wǎng)頁提交PUT請求的方法,對應(yīng)HTTP的RUT |
| requests.patch() | 向HTML網(wǎng)頁提交局部修改請求,對應(yīng)于HTTP的PATCH |
| requests.delete() | 向HTML頁面提交刪除請求,對應(yīng)HTTP的DELETE |
發(fā)送請求后,服務(wù)器會接受請求,并返回一個response。

response作為一個對象,具有如下常用屬性:
| r.status_code | HTTP請求的返回狀態(tài),200表示連接成功,404表示失敗 |
| r.text | HTTP響應(yīng)內(nèi)容(字符串形式) |
| r.content | HTTP響應(yīng)內(nèi)容(二進制形式) |
接下來,我們以訪問百度主頁的代碼為例來看看吧!
import requestsurl="http://www.baidu.com/"res=requests.get(url)print(res.status_code)200
其中,我們介紹一下requests.get()函數(shù)的帶參數(shù)形式。params是字典或字節(jié)序列,可以添加到url中;headers是HTTP的定制頭等等。我們以headers為例,headers是HTTP的定制頭,一些服務(wù)器在處理requests請求時會識別請求頭,并攔截python爬蟲。
import requestsurl="http://www.zhihu.com/"res=requests.get(url)print(res.status_code)400print(res.request.headers){'User-Agent': 'python-requests/2.22.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
可以看到我們通過python訪問知乎首頁被攔截了,查看請求頭時發(fā)現(xiàn)User-agent是python—-requests/2.22.0。下面我們嘗試修改請求頭偽裝成瀏覽器:

import?requestspre={'User-agent':'Mozilla/5.0'}res=requests.get("https://www.zhihu.com/billboard",headers=pre)print(res.status_code)200
可見,修改請求頭后訪問成功。
利用requests的get方法和response的content屬性(圖片以二進制形式保存),我們可以下載網(wǎng)絡(luò)上的一些圖片,下面以獲取新浪新聞的一張圖片為例:
import?requestsurl="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("爬取失敗")文件保存成功~解析內(nèi)容~
Beautiful ?Soup庫是解析、遍歷、維護文檔樹的功能庫。
簡單地說,BeautifulSoup能夠幫助用戶將response中的html內(nèi)容解析,得到一個BeautifulSoup的對象,并且能夠以標(biāo)準(zhǔn)的縮進格式輸出。我們以知乎熱榜網(wǎng)頁為例(注意B和S要大寫哦):
import requestsfrom bs4 import BeautifulSouppre={'User-agent':'Mozilla/5.0'}res=requests.get("https://www.zhihu.com/billboard",headers=pre)rep=res.textsoup=BeautifulSoup(rep,"html.parser")print(soup)
?運行代碼后可以看見,已經(jīng)產(chǎn)生標(biāo)準(zhǔn)縮進格式輸出。(截取部分如下圖)
?這里,我們來認(rèn)識一下BeautifulSoup類的部分元素:| Tag | 標(biāo)簽,最基本的信息組織單元,分別用<>和>標(biāo)明開頭和結(jié)尾 |
| Name | 標(biāo)簽的名字, ... 的名字是’p’,格式:? |
| Attributes | 標(biāo)簽的屬性,字典形式組織,格式:? |
| NavigableString | 標(biāo)簽內(nèi)非屬性字符串,<>...>中字符串,格式:? |
在代碼運行返回的html內(nèi)容中,可以看見a標(biāo)簽里包含了
等子孫標(biāo)簽,其中包含了我們需要的熱榜話題,利用這段代碼我們可以獲取熱榜第一的信息進而獲取榜單全部話題。
我們觀察到所有熱榜話題所在標(biāo)簽name都是div,屬性中都包含class="HotList- itemTitle"。我們使用bs4的find_all函數(shù),返回一個包含許多元素的列表,然后利用text屬性提取有用的字符逐個輸出。
?今天的爬蟲入門我們就先講到這里哦,小周下期繼續(xù)給大家?guī)砼老x分享哦!
最后,祝大家新年快樂,身體健康。

終”
import requestsfrom bs4 import BeautifulSouppre={'User-agent':'Mozilla/5.0'}try:res=requests.get("https://www.zhihu.com/billboard",headers=pre)res.raise_for_statusrep=res.textexcept: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("獲取失敗")
我們觀察到所有熱榜話題所在標(biāo)簽name都是div,屬性中都包含class="HotList- itemTitle"。我們使用bs4的find_all函數(shù),返回一個包含許多元素的列表,然后利用text屬性提取有用的字符逐個輸出。
?今天的爬蟲入門我們就先講到這里哦,小周下期繼續(xù)給大家?guī)砼老x分享哦!最后,祝大家新年快樂,身體健康。

終”
評論
圖片
表情
