2019年不管是程式語言排行榜還是在網際網路行業,Python一直備受爭議,到底是Java熱門還是Python熱門也是一直讓人爭吵的話題。
目前網際網路世界針對爬蟲這一塊已經通過自身的協議建立起一定的道德規範(Robots協議),但法律部分還在建立和完善中。那麼Robots協議是什麼呢?
Robots協議
Robots協議(爬蟲協議)的全稱是「網絡爬蟲排除標準」(Robots Exclusion Protocol),網站通過Robots協議告訴搜尋引擎哪些頁面可以抓取,哪些頁面不能抓取。該協議是國際網際網路界通行的道德規範,雖然沒有寫入法律,但是每一個爬蟲都應該遵守這項協議。
下面以淘寶網的robots.txt為例進行介紹。
User-agent: Baiduspider #百度爬蟲引擎Allow: /article #允許訪問/article.htm、/article/12345.comAllow: /oshtml Allow: /ershouDisallow: /product/ #禁止訪問/product/12345.comDisallow: / #禁止訪問除Allow規定頁面外的其他所有頁面
User-Agent: Googlebot #谷歌爬蟲引擎Allow: /articleAllow: /oshtmlAllow: /product #允許訪問/product.htm、/product/12345.comAllow: /spuAllow: /dianpuAllow: /wenzhangAllow: /overseaDisallow: /在上面的robots文件中,淘寶網對用戶代理為百度爬蟲引擎進行了規定。
以Allow項的值開頭的URL是允許robot訪問的。例如,Allow:/article允許百度爬蟲引擎訪問/article.htm、/article/12345.com等。
以Disallow項為開頭的連結是不允許百度爬蟲引擎訪問的。例如,Disallow:/product/不允許百度爬蟲引擎訪問/product/12345.com等。
最後一行,Disallow:/禁止百度爬蟲訪問除了Allow規定頁面外的其他所有頁面。
因此,當你在百度搜索「淘寶」的時候,搜索結果下方的小字會出現:「由於該網站的robots.txt文件存在限制指令(限制搜尋引擎抓取),系統無法提供該頁面的內容描述」,如圖所示。百度作為一個搜尋引擎,良好地遵守了淘寶網的robot.txt協議,所以你是不能從百度上搜索到淘寶內部的產品信息的。
淘寶的Robots協議對谷歌爬蟲的待遇則不一樣,和百度爬蟲不同的是,它允許谷歌爬蟲爬取產品的頁面Allow:/product。因此,當你在谷歌搜索「淘寶iphone7」的時候,可以搜索到淘寶中的產品,如圖所示。
當你爬取網站數據時,無論是否僅供個人使用,都應該遵守Robots協議。
加入VIP會員,上百本電子書、上千門課程等你免費學
網絡爬蟲的約束
除了上述Robots協議之外,我們使用網絡爬蟲的時候還要對自己進行約束:過於快速或者頻密的網絡爬蟲都會對伺服器產生巨大的壓力,網站可能封鎖你的IP,甚至採取進一步的法律行動。因此,你需要約束自己的網絡爬蟲行為,將請求的速度限定在一個合理的範圍之內。
爬取網站的時候需要限制自己的爬蟲,遵守Robots協議和約束網絡爬蟲程序的速度;在使用數據的時候必須遵守網站的智慧財產權。
所以只要你合理利用就不會違法,爬蟲還是可以學的哦,畢竟爬蟲對數據分析真的非常有用,那麼爬蟲該怎麼學呢?今天來教大家編寫一個簡單的爬蟲!
編寫第一個簡單的爬蟲
第一步:獲取頁面#!/usr/bin/python# coding: utf-8
import requests link = "http://www.santostang.com/" # 定義請求頭的瀏覽器代理,偽裝成瀏覽器headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
r = requests.get(link, headers= headers) print (r.text)上述代碼就能獲取博客首頁的HTML代碼,HTML是用來描述網頁的一種語言,也就是說網頁呈現的內容背後都是HTML代碼。如果你對HTML不熟悉的話,可以先去w3school(http://www.w3school.com.cn/html/index.asp)學習一下,大概花上幾個小時就可以了解HTML。
在上述代碼中,首先import requests引入包requests,之後獲取網頁。
(1)首先定義link為目標網頁地址。
(2)之後用headers來定義請求頭的瀏覽器代理,進行偽裝
(3)r是requests的Response回復對象,我們從中可以獲取想要的信息。r.text是獲取的網頁內容代碼。
運行上述代碼得到的結果如圖所示。
第二步:提取需要的數據#!/usr/bin/python# coding: utf-8
import requestsfrom bs4 import BeautifulSoup #從bs4這個庫中導入BeautifulSoup
link = "http://www.santostang.com/"headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'} r = requests.get(link, headers= headers)
soup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析
#找到第一篇文章標題,定位到class是"post-title"的h1元素,提取a,提取a裡面的字符串,strip()去除左右空格title = soup.find("h1", class_="post-title").a.text.strip()print (title)在獲取整個頁面的HTML代碼後,我們需要從整個網頁中提取第一篇文章的標題。
這裡用到BeautifulSoup這個庫對頁面進行解析,BeautifulSoup將會在第4章進行詳細講解。首先需要導入這個庫,然後把HTML代碼轉化為soup對象,接下來用soup.find(「h1」,class_=「post-title」).a.text.strip()得到第一篇文章的標題,並且列印出來
soup.find(「h1」,class_=「post-title」).a.text.strip()的意思是,找到第一篇文章標題,定位到class是"post-title"的h1元素,提取a元素,提取a元素裡面的字符串,strip()去除左右空格。
對初學者來說,使用BeautifulSoup從網頁中提取需要的數據更加簡單易用。
那麼,我們怎麼從那麼長的代碼中準確找到標題的位置呢?
這裡就要隆重介紹Chrome瀏覽器的「檢查(審查元素)」功能了。下面介紹找到需要元素的步驟。
步驟01
使用Chrome瀏覽器打開博客首頁www.santostang.com。右擊網頁頁面,在彈出的快捷菜單中單擊「檢查」命令,如圖所示。
步驟02
出現如下圖所示的審查元素頁面。單擊左上角的滑鼠鍵按鈕,然後在頁面上單擊想要的數據,下面的Elements會出現相應的code所在的地方,就定位到想要的元素了。
步驟03
在代碼中找到標藍色的地方,為echarts學習筆記(2)–同一頁面多圖表。我們可以用soup.find("h1",class_="post-title").a.text.strip()提取該博文的標題。
第三步:存儲數據import requestsfrom bs4 import BeautifulSoup #從bs4這個庫中導入BeautifulSoup
link = "http://www.santostang.com/"headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'} r = requests.get(link, headers= headers)
soup = BeautifulSoup(r.text, "html.parser") #使用BeautifulSoup解析title = soup.find("h1", class_="post-title").a.text.strip()print (title)
# 打開一個空白的txt,然後使用f.write寫入剛剛的字符串titlewith open('title_test.txt', "a+") as f: f.write(title)存儲到本地的txt文件非常簡單,在第二步的基礎上加上2行代碼就可以把這個字符串保存在text中,並存儲到本地。txt文件地址應該和你的Python文件放在同一個文件夾。返回文件夾,打開title.txt文件,其中的內容如圖所示。以上就是編寫第一個爬蟲的方法,你們學會了嗎?暫時沒學會也沒關係,你可以慢慢學哦~以上內容自《Python網絡爬蟲從入門到實踐(第2版)》【文末有福利】往下拉!掃碼加入VIP會員免費讀
使用Python編寫網絡爬蟲程序獲取網際網路上的大數據是當前的熱門專題。本書內容包括三部分:基礎部分、進階部分和項目實踐。基礎部分(第1~7章)主要介紹爬蟲的三個步驟——獲取網頁、解析網頁和存儲數據,並通過諸多示例的講解,讓讀者能夠從基礎內容開始系統性地學習爬蟲技術,並在實踐中提升Python爬蟲水平。進階部分(第8~13章)包括多線程的並發和並行爬蟲、分布式爬蟲、更換IP等,幫助讀者進一步提升爬蟲水平。項目實踐部分(第14~17章)使用本書介紹的爬蟲技術對幾個真實的網站進行抓取,讓讀者能在讀完本書後根據自己的需求寫出爬蟲程序。推薦理由:
基礎知識+完整的知識模塊+4個實踐案例的教學,讓讀者快速掌握爬蟲程序的編寫,快速成長為爬蟲高手
更多Python好書推薦
以上書籍均已加入到VIP會員卡權益,只要擁有這張VIP會員卡即可免費閱讀上百本電子書,還有上千門優質課程免費看哦,快掃碼查看!參與方式:只要在本文留言參與話題「技術書籍上,你會選擇購買紙質書籍還是電子書籍,為什麼呢?」即可有機會獲得價值129元的可擦筆記本一個,只有2個名額哦~
獲獎公布時間:2月21日14:00
如果可以的話也可掃碼入群一起交流學習哦~電子書的任何問題都可以在群裡溝通!