激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python常用的爬蟲技巧總結

Python常用的爬蟲技巧總結

2020-08-18 09:52jhao104 Python

本文給大家匯總介紹了Python編寫爬蟲的時候經常需要用到的一些技巧,非常的實用,有需要的小伙伴可以參考下

用python也差不多一年多了,python應用最多的場景還是web快速開發、爬蟲、自動化運維:寫過簡單網站、寫過自動發帖腳本、寫過收發郵件腳本、寫過簡單驗證碼識別腳本。

爬蟲在開發過程中也有很多復用的過程,這里總結一下,以后也能省些事情。

1、基本抓取網頁

get方法

?
1
2
3
4
5
import urllib2
 
url = "http://www.baidu.com"
response = urllib2.urlopen(url)
print response.read()

post方法

?
1
2
3
4
5
6
7
8
9
import urllib
import urllib2
 
url = "http://abcde.com"
form = {'name':'abc','password':'1234'}
form_data = urllib.urlencode(form)
request = urllib2.Request(url,form_data)
response = urllib2.urlopen(request)
print response.read()

2、使用代理IP

    在開發爬蟲過程中經常會遇到IP被封掉的情況,這時就需要用到代理IP;

在urllib2包中有ProxyHandler類,通過此類可以設置代理訪問網頁,如下代碼片段:

?
1
2
3
4
5
6
7
import urllib2
 
proxy = urllib2.ProxyHandler({'http': '127.0.0.1:8087'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://www.baidu.com')
print response.read()

3、Cookies處理

    cookies是某些網站為了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數據(通常經過加密),python提供了cookielib模塊用于處理cookies,cookielib模塊的主要作用是提供可存儲cookie的對象,以便于與urllib2模塊配合使用來訪問Internet資源.

代碼片段:

?
1
2
3
4
5
6
import urllib2, cookielib
 
cookie_support= urllib2.HTTPCookieProcessor(cookielib.CookieJar())
opener = urllib2.build_opener(cookie_support)
urllib2.install_opener(opener)
content = urllib2.urlopen('http://XXXX').read()

    關鍵在于CookieJar(),它用于管理HTTP cookie值、存儲HTTP請求生成的cookie、向傳出的HTTP請求添加cookie的對象。整個cookie都存儲在內存中,對CookieJar實例進行垃圾回收后cookie也將丟失,所有過程都不需要單獨去操作。

  手動添加cookie

?
1
2
3
4
cookie = "PHPSESSID=91rurfqm2329bopnosfu4fvmu7;
kmsign=55d2c12c9b1e3;
KMUID=b6Ejc1XSwPq9o756AxnBAg="
request.add_header("Cookie", cookie)

4、偽裝成瀏覽器

    某些網站反感爬蟲的到訪,于是對爬蟲一律拒絕請求。所以用urllib2直接訪問網站經常會出現HTTP Error 403: Forbidden的情況

對有些 header 要特別留意,Server 端會針對這些 header 做檢查

  1.User-Agent 有些 Server 或 Proxy 會檢查該值,用來判斷是否是瀏覽器發起的 Request

  2.Content-Type 在使用 REST 接口時,Server 會檢查該值,用來確定 HTTP Body 中的內容該怎樣解析。

這時可以通過修改http包中的header來實現,代碼片段如下:

?
1
2
3
4
5
6
7
8
9
10
import urllib2
 
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'
}
request = urllib2.Request(
  url = 'http://my.oschina.net/jhao104/blog?catalog=3463517',
  headers = headers
)
print urllib2.urlopen(request).read()

5、頁面解析

    對于頁面解析最強大的當然是正則表達式,這個對于不同網站不同的使用者都不一樣,就不用過多的說明,其次就是解析庫了,常用的有兩個lxml和BeautifulSoup,對于這兩個庫,我的評價是,都是HTML/XML的處理庫,Beautifulsoup純python實現,效率低,但是功能實用,比如能用通過結果搜索獲得某個HTML節點的源碼;lxmlC語言編碼,高效,支持Xpath

6、驗證碼的處理

對于一些簡單的驗證碼,可以進行簡單的識別。本人也只進行過一些簡單的驗證碼識別。但是有些反人類的驗證碼,比如12306,可以通過打碼平臺進行人工打碼,當然這是要付費的。

7、gzip壓縮

    有沒有遇到過某些網頁,不論怎么轉碼都是一團亂碼。哈哈,那說明你還不知道許多web服務具有發送壓縮數據的能力,這可以將網絡線路上傳輸的大量數據消減 60% 以上。這尤其適用于 XML web 服務,因為 XML 數據 的壓縮率可以很高。

但是一般服務器不會為你發送壓縮數據,除非你告訴服務器你可以處理壓縮數據。

于是需要這樣修改代碼:

?
1
2
3
4
5
import urllib2, httplib
request = urllib2.Request('http://xxxx.com')
request.add_header('Accept-encoding', 'gzip')    1
opener = urllib2.build_opener()
f = opener.open(request)

這是關鍵:創建Request對象,添加一個 Accept-encoding 頭信息告訴服務器你能接受 gzip 壓縮數據

然后就是解壓縮數據:

?
1
2
3
4
5
6
7
import StringIO
import gzip
 
compresseddata = f.read()
compressedstream = StringIO.StringIO(compresseddata)
gzipper = gzip.GzipFile(fileobj=compressedstream)
print gzipper.read()

8、多線程并發抓取

    單線程太慢的話,就需要多線程了,這里給個簡單的線程池模板 這個程序只是簡單地打印了1-10,但是可以看出是并發的。

雖然說python的多線程很雞肋,但是對于爬蟲這種網絡頻繁型,還是能一定程度提高效率的。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from threading import Thread
from Queue import Queue
from time import sleep
# q是任務隊列
#NUM是并發線程總數
#JOBS是有多少任務
q = Queue()
NUM = 2
JOBS = 10
#具體的處理函數,負責處理單個任務
def do_somthing_using(arguments):
  print arguments
#這個是工作進程,負責不斷從隊列取數據并處理
def working():
  while True:
    arguments = q.get()
    do_somthing_using(arguments)
    sleep(1)
    q.task_done()
#fork NUM個線程等待隊列
for i in range(NUM):
  t = Thread(target=working)
  t.setDaemon(True)
  t.start()
#把JOBS排入隊列
for i in range(JOBS):
  q.put(i)
#等待所有JOBS完成
q.join()

 

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 国产91免费看 | 国产乱淫av片免费网站 | 国产成人自拍小视频 | 一区二区三区欧美精品 | 久久久久久久久久久国产精品 | 亚洲精品 在线播放 | 日韩在线视频在线观看 | 国产精品美女一区二区 | 久久精品欧美一区二区 | 欧美成人做爰高潮片免费视频 | 久久久久久久久成人 | 欧美男女爱爱视频 | 成人一级黄色大片 | 水卜樱一区二区av | 日本羞羞影院 | 精品成人国产在线观看男人呻吟 | 亚州综合图片 | 九九热在线视频观看 | 在火车上摸两乳爽的大叫 | 嗯~啊~弄嗯~啊h高潮视频 | 欧美xxxxx视频 | 把娇妻调教成暴露狂 | 欧美a∨一区二区三区久久黄 | 欧美性受xxx黑人xyx性爽 | 久久国产精品久久久久久 | 一区二区三区在线观看国产 | 欧美又黄又嫩大片a级 | 在线看成人av | 97香蕉超级碰碰久久免费软件 | 成人免费毛片一 | 黄视频免费在线 | 露脸各种姿势啪啪的清纯美女 | 极品销魂一区二区三区 | 欧美成人免费电影 | 午夜视频你懂的 | 毛片免费在线播放 | 91 免费视频 | 热99视频| 99久99| 高清国产午夜精品久久久久久 | 天天草天天干天天射 |