Python網絡爬蟲基礎

基礎知識講解部分(網絡爬蟲入門)

網絡爬蟲就是自動地從互聯網上獲取程序。想必你聽說過這個詞彙,但是又不太瞭解,大家會覺得掌握網絡爬蟲還是要花一些功夫的,因此這個門檻讓你有點望而卻步。我常常覺得計算機和互聯網的發明給人類帶來了如此大的便利,讓人們不用閱讀說明書就知道如何上手,但是偏偏編程的道路卻又是如此艱辛。因此,我會儘可能做到淺顯易懂,希望讀者能夠讀懂我說了什麼,從而能夠享受到其中的快樂。

基本介紹

我是一名學生,通過學習Python網絡爬蟲從入門到實踐(第二版)發現了其中的一些問題,這裏我會一一告訴大家,我的主要目的是講解網絡爬蟲的基礎部分,後面會介紹幾個實踐。同時呢,我是第一次寫博客,有什麼編輯上的不完善請大佬多多指教,希望大家多多閱讀我的文章,thank you very much!工慾善其事必先利其器,在學習爬蟲代碼之前,我們必須知道python的基礎,這就好比是蓋樓必須要打好地基,畢竟萬丈高樓平地起啊!同時我還會介紹一下爬蟲中的一些知識。

爬蟲知識介紹

Robots協議

網絡爬蟲目前還處於早期的拾荒階段,雖然互聯網世界已經通過自身的協議建立起一定的道德規範(Robots協議),但法律部分還在建立和完善中。從目前的情況來看,如果抓取的數據屬於個人使用或科研範疇,基本不存在問題;而如果數據屬於商業盈利範疇,就要就事而論,有可能屬於違法行爲,也有可能不違法。
Robots協議(爬蟲協議)的全稱是“網絡爬蟲排除標準”(Robots Exclusion Protocol),網站通過Robots協議告訴搜索引擎那些頁面可以抓取,哪些頁面不可以抓取,該協議是國際互聯網界通行的道德規範,雖然沒有寫入法律,但是每一個爬蟲都應該遵守這項協議。
下面以淘寶網的robots.txt爲例進行介紹
這裏僅截取部分代碼,查看完整代碼可以訪問https://www.taobao.com/robots.txt

User-agent: Baiduspider #百度爬蟲引擎
Allow: /article #允許訪問/article.htm、/article/12345.com等
Allow: /oshtml
Allow: /ershou
Allow: /$
Disallow: /product/ #禁止訪問/product/12345.com
Disallow: / #禁止訪問除Allow規定頁面的其他所有頁面
###########################################
User-Agent: Googlebot #谷歌爬蟲引擎
Allow: /article #允許訪問/article.htm、/article/12345.com等
Allow: /oshtml
Allow: /ershou
Allow: /spu
Allow: /dianpu
Allow: /oversea
Allow: /list
Allow: /ershou
Allow: /$
Disallow: / #禁止訪問除Allow規定頁面的其他所有頁面

當你在百度搜索“淘寶”的時候,淘寶上不會出現二手商品信息,而在Google上搜“淘寶”的時候會出現二手商品信息呢,就是因爲有上述代碼,如圖所示:
在這裏插入圖片描述
由於谷歌是國外的網站,使用要翻牆,所以這裏不顯示在谷歌上搜淘寶的圖片了。

網絡爬蟲的約束

2016年11月7日,全國人民代表大會常務委員會在通過了《中華人民共和國網絡安全法》,2017年6月1日正式實施。如果爬蟲爬取的是商業網站,並且目標網站使用了反爬蟲機制,那麼強行突破反爬蟲機制可能構成非法侵入計算機系統罪、非
法獲取計算機信息系統數據罪。如果目標網站有反爬蟲聲明,那麼對方在被爬蟲爬取以後,可以根據服務器日誌或者各種記錄來起訴使用爬蟲的公司。在道德方面,就是要遵守Robots協議。

Python爬蟲流程

網絡爬蟲的流程非常簡單,主要分爲三部分:
(1)獲取網頁;
獲取網頁就是給一個網址發出請求,該網址會返回整個頁面的數據。類似於在瀏覽器中鍵入網址並按回車鍵,然後可以看到網站的整個頁面。
(2)解析網頁(提取數據);
解析網頁就是從整個網頁的數據中提取想要看的數據。類似於在瀏覽器中看到網站的整個頁面,但是你想找的是產品的價格,價格就是你想要的數據。
(3)存儲數據。
存儲數據也很容易理解,就是把數據存儲下來。我們可以存儲在csv中,也可以存儲在數據庫中。

獲取網頁
解析網頁
存儲數據

Python基礎講解

Python的安裝

在學習python之初,要先安裝python環境和其相關編輯器,爲了成功使用python,首先我們得去官網下載安裝包https://www.python.org/getit/,這裏我們選擇下載版本2.7.14,當然你也可以選擇3.0以上的版本,界面下方有版本列表,你可以根據你的實際需求選擇下載安裝包,下載的時候注意要根據你的電腦系統來進行選擇。
在這裏插入圖片描述
下載完之後就可以進行安裝了,雙擊打開,默認選擇安裝適合所有人的那項,下一項是自定義安裝,然後下一步選擇安裝路徑,路徑我不習慣放在系統盤,這裏就裝在D盤爲例,下一步,這裏最後一項有個選擇,這裏選擇第二項,安裝的時候會自動爲你配置環境變量,省得自己再去配了,OK下一步,完成安裝。

在這裏插入圖片描述
在這裏插入圖片描述
安裝好之後我們得確認一下環境變量是否配置進去了,鼠標右擊我的電腦,屬性,高級系統設置,環境變量,查看path
在這裏插入圖片描述
如果完成了這些步驟,那麼我要恭喜你,python環境你已經搭建好了,下面我們要選擇python編輯器了,我見到寫爬蟲書的作者使用的是Anaconda,但我就是不用他用到編輯器,因爲我找到了我覺得更加方便的python編輯器——pycharm,pycharm不僅可以運行爬蟲,還可以進行機器學習呢,是不是很棒?我們要安裝社區版的,因爲企業版的要花錢呢。下面是pycharm的安裝,很簡單呢。

首先在下面鏈接http://www.jetbrains.com/pycharm/download/#section=windows進入如下頁面,並點擊箭頭指示的地方進行下載。
在這裏插入圖片描述
下載好以後,點擊安裝包進行安裝,安裝到任意磁盤(推薦D盤),安裝好啓動pycharm,如圖所示:
在這裏插入圖片描述
在這裏插入圖片描述

python基礎

1.字符串(string)

字符串是最常見的數據類型,一般用來存儲類似“句子”的數據,並放在單引號‘ ’或雙引號“ ”中,如果要連接字符串,那麼可以簡單地加起來。

string1 = 'Python Web Scrappy'
string2 = 'by Santos'
string3 = string1 + " " + string2
print(string3)

Python Web Scrappy by Santos

2.數字(Number)

數字用來存儲數值,包含兩種常用的數字類型:整數(int)和浮點數(float),其中浮點數由整數和小數部分組成。兩種類型之間可以相互轉換,如將整數轉換爲浮點數,就在變量前加上float;如果將浮點數轉換爲整數,就在變量前加上int,例如:

int1 = 7
floatl = 7.5
trans_int = int(floatl)
print(trans_int)

7

3.列表(list)

如果需要把上述字符串和數字囊括起來,就可以使用列表。列表能夠包含任意種類的數據類型和任意數量。創建列表非常容易,只要把不同的變量放入方括號中,並用逗號分隔即可,例如:

list1= ['Python','Web','Scrappy']
list2 = [1,2,3,4,5]
list3 = ["a",2,"c",4]
print("list[0]: ", list1[0])
print("list2[1:3]: ", list2[1:3])
list1[1] = "new"
print(list1)

list[0]: Python
list2[1:3]: [2, 3]
[‘Python’, ‘new’, ‘Scrappy’]

4.字典(Dictionary)

字典是一種可變容器模型,正如其名,字典中含有“字”(鍵值,key)和值(value),使用字典就像是自己創建一個字典和查字典的過程。每個存儲的值都對應着一個鍵值key,key必須唯一,但是值不同。值也可以取任何數據類型,例如:

namebook = {"Name": "Alex", "Age": 7, "Class": "First"}
print(namebook["Name"])
print(namebook)
for key, value in namebook.items():
    print(key, value)

Alex
{‘Name’: ‘Alex’, ‘Age’: 7, ‘Class’: ‘First’}
Name Alex
Age 7
Class
First

條件語句和循環語句

條件語句可以使得黨滿足條件的時候才執行某部分代碼。條件爲布爾值,也就是隻有True和False兩個值。當if判斷條件成立時才執行後面的語句;當條件不成立的時候,執行else後面的語句,例如:

book = "java"
if book == "python":
    print("You are studying python.")
elif book == "java":
    print("You are studying java.")
else:
    print("Wrong.")

You are studying java.

循環語句能讓我們執行一個代碼片段多次,循環分爲for循環和while循環。for循環能在一個給定的順序下重複執行:

citylist = ["Beijing", "Shanghai", "Guangzhou"]
for eachcity in citylist:
    print(eachcity)

Beijing
Shanghai
Guangzhou

while循環能不斷重複執行,只要能滿足一個條件,例如:

count = 0
while count < 3:
    print(count)
    count += 1

0
1
2

函數(Functions)

一個函數包括輸入參數和輸出參數,python的函數功能可以用 y = x + 1 的數學函數來理解,在輸入 x = 2 的參數時,y輸出3。但是在實際情況中,某些函數輸入和輸出參數可以不用指明。下面定義一個函數:

def calulus (x):
    y = x + 1
    return y
result = calulus(2)
print(result)

3

面向對象編程

隨着時間的推移,在編程的方式上又發展出了面向對象編程。面向對象編程是把函數進行分類和封裝以後放入對象中,使得開發更快、更強,例如:

class Person:
    def __init__(self, name, age):  #_init_方法稱爲類的構造方法
        self.name = name
        self.age = age
    def detail(self):  #通過self調用被封裝的內容
        print(self.name)
        print(self.age)
obj1 = Person('santos', 18)
obj1.detail()  #python將obj1傳給self參數,此時內部self=obj1

santos
18

結尾

感謝大家能夠看到這裏,以後我就要寫關於爬蟲的代碼了,不懂的部分會在代碼旁詳細解釋。

發佈了9 篇原創文章 · 獲贊 67 · 訪問量 5681
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章