python爬蟲如何深入學習?

本人學習爬蟲將近半年(課餘時間自學),雖然看過很多網課,也看了一點書,但是總感覺自己所知甚少。我有如下幾個問題
(1)如何深入學習爬蟲
(2)像requests等多種庫如何高效自學(本人看官方網站實在吃力,但也在慢慢看)
(3)爬蟲的深入學習是需要什麼基礎(比如說js等等)


首先要自己會寫代碼。

學習爬蟲可以從下面一些知識點入手學習。
1、http相關知識。
2、瀏覽器攔截、抓包。
3、python2 中編碼知識,python3 中bytes 和str類型轉換。
4、抓取javascript 動態生成的內容。
4、模擬post、get,header等
5、cookie處理,登錄。
6、代理訪問。
7、多線程訪問、python 3 asyncio 非同步。
8、正則表達式、xpath等
等等。。。。
還有scrapy requests等第三方庫的使用。
請看看


Python爬蟲聯想詞視頻和代碼
知乎專欄

跟黃哥學Python爬蟲抓取代理IP和驗證。
知乎專欄
跟黃哥學Python爬蟲抓取代理IP
知乎專欄


深入學習的話

如何爬數據爬得快?如何存數據快,如何拿數據快?如何反爬蟲?

爬快則要用分散式架構,設計數據結構和演算法
存快要考慮資料庫特徵
拿快要考慮存儲分塊和調度
反爬蟲要模擬正常網頁事件行為


深入之後已經不是計算機語言的問題,不是HTTP協議的理解問題,而是一個問題解決的方案。你的邏輯能力,如何觀察網頁,如何選擇調度方法和存儲工具。

http協議請求和響應報文本來就是文本,簡單就是美。任何計算機語言都封裝有http庫,或者更底層的網路庫。獲取一個網頁的東西並不難。解析網頁內容也不難,解析簡單文本的,json/html/xml的,其他二進位的都是基於正則表達式封裝的庫。

Python可以封裝一個萬能抓取函數,十幾行代碼而已,何必使用複雜化別人寫的你不知道為什麼的requests?

```

# -*-coding:utf-8-*-
# Created by 一隻尼瑪 on 16-8-26.
# 功能:
#  抓取網頁
import urllib.request, urllib.parse, http.cookiejar
import os, time, re
import http.cookies

# 自己封裝的抓取函數
def getHtml(url, daili="", postdata={}, header=[]):
"""
抓取網頁:支持cookie
第一個參數為網址,第二個為POST的數據
"""
# COOKIE文件保存路徑
filename = "cookie.txt"

# 聲明一個MozillaCookieJar對象實例保存在文件中
cj = http.cookiejar.MozillaCookieJar(filename)
# cj =http.cookiejar.LWPCookieJar(filename)

# 從文件中讀取cookie內容到變數
# ignore_discard的意思是即使cookies將被丟棄也將它保存下來
# ignore_expires的意思是如果在該文件中 cookies已經存在,則覆蓋原文件寫
# 如果存在,則讀取主要COOKIE
if os.path.exists(filename):
cj.load(filename, ignore_discard=True, ignore_expires=True)
# 讀取其他COOKIE
if os.path.exists("../subcookie.txt"):
cookie = open("../subcookie.txt", "r").read()
else:
cookie = ""
# 建造帶有COOKIE處理器的打開專家
proxy_support = urllib.request.ProxyHandler({"http": "http://" + daili})
# 開啟代理支持
if daili:
print("代理:" + daili + "啟動")
opener = urllib.request.build_opener(proxy_support, urllib.request.HTTPCookieProcessor(cj),
urllib.request.HTTPHandler)
else:
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
if header:
pass
else:
header = [("User-Agent",
"Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5"),
("Referer", "http://s.m.taobao.com"),
("Host", "h5.m.taobao.com"),
("Cookie", cookie)]
# 打開專家加頭部
opener.addheaders = header

# 分配專家
urllib.request.install_opener(opener)
# 有數據需要POST
if postdata:
# 數據URL編碼
postdata = urllib.parse.urlencode(postdata)

# 抓取網頁
html_bytes = urllib.request.urlopen(url, postdata.encode()).read()
else:
html_bytes = urllib.request.urlopen(url).read()

# 保存COOKIE到文件中
cj.save(ignore_discard=True, ignore_expires=True)
return html_bytes

if __name__ == "__main__":
print(getHtml("http://www.baidu.com").decode("utf-8", "ignore"))

```

Golang語言更原始,我自己封裝了一個庫,使用也辣雞簡單。

https://github.com/hunterhug/GoSpider/blob/master/README.md

https://github.com/hunterhug/GoSpiderExample/blob/master/README.md

爬蟲深入基礎:
認真學計算機網路
回顧數據結構和簡單演算法
掌握資料庫理論
理解分散式演算法理論

選一門語言,Python就是太傻逼了,不過雷鋒多。。。


推薦閱讀:

TAG:Python | 爬蟲計算機網路 | Python庫 | 網頁爬蟲 | python第三方庫 |