python開發過程中的複用總結
爬蟲在開發過程中也有很多複用的過程,這裡總結一下,以後也能省些事情。
1、基本抓取網頁
get方法
post方法
2、使用代理IP
在開發爬蟲過程中經常會遇到IP被封掉的情況,這時就需要用到代理IP;
在urllib2包中有ProxyHandler類,通過此類可以設定代理訪問網頁。
3、Cookies處理
cookies是某些網站為了辨別使用者身份、進行session跟蹤而儲存在使用者本地終端上的資料(通常經過加密),python提供了cookielib模組用於處理cookies,cookielib模組的主要作用是提供可儲存cookie的物件,以便於與urllib2模組配合使用來訪問Internet資源.
關鍵在於CookieJar(),它用於管理HTTP cookie值、儲存HTTP請求生成的cookie、向傳出的HTTP請求新增cookie的物件。整個cookie都儲存在記憶體中,對CookieJar例項進行垃圾回收後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來實現。
5、頁面解析
對於頁面解析最強大的當然是正則表示式,這個對於不同網站不同的使用者都不一樣,就不用過多的說明,附兩個比較好的網址:
正則表示式入門
正則表示式線上測試
其次就是解析庫了,常用的有兩個lxml和BeautifulSoup,對於這兩個的使用介紹兩個比較好的網站:
lxml
BeautifulSoup
對於這兩個庫,我的評價是,都是HTML/XML的處理庫,Beautifulsoup純python實現,效率低,但是功能實用,比如能用通過結果搜尋獲得某個HTML節點的原始碼;lxmlC語言編碼,高效,支援Xpath
6、驗證碼的處理
對於一些簡單的驗證碼,可以進行簡單的識別。本人也只進行過一些簡單的驗證碼識別。但是有些反人類的驗證碼,比如12306,可以通過打碼平臺進行人工打碼,當然這是要付費的。
7、gzip壓縮
有沒有遇到過某些網頁,不論怎麼轉碼都是一團亂碼。哈哈,那說明你還不知道許多web服務具有傳送壓縮資料的能力,這可以將網路線路上傳輸的大量資料消減 60% 以上。這尤其適用於 XML web 服務,因為 XML 資料 的壓縮率可以很高。
但是一般伺服器不會為你傳送壓縮資料,除非你告訴伺服器你可以處理壓縮資料。
這是關鍵:建立Request物件,新增一個 Accept-encoding 頭資訊告訴伺服器你能接受 gzip 壓縮資料
然後就是解壓縮資料:
8、多執行緒併發抓取
單執行緒太慢的話,就需要多執行緒了,這裡給個簡單的執行緒池模板 這個程式只是簡單地列印了1-10,但是可以看出是併發的。
雖然說python的多執行緒很雞肋,但是對於爬蟲這種網路頻繁型,還是能一定程度提高效率的。
End.
a' M' o3 [% G5 [- h*
相關推薦
python開發過程中的複用總結
爬蟲在開發過程中也有很多複用的過程,這裡總結一下,以後也能省些事情。1、基本抓取網頁get方法post方法2、使用代理IP在開發爬蟲過程中經常會遇到IP被封掉的情況,這時就需要用到代理IP;在urllib2包中有ProxyHandler類,通過此類可以設定代理訪問網頁。3、C
windows系統在開發過程中快捷鍵總結
Windows+M 最小化所有視窗到桌面 Windows+R 執行dos視窗 Windows+E 快捷開啟我的電腦 Windows+L 對電腦進行鎖屏 Windows+D 顯示或者恢復桌面,作用可類似於(Windows+m以及windows+shift+
Python 開發過程中的一些坑
Can’t find xgettext. Make sure you have GNU gettext tools 0.15. 配置環境變數 C:\Program Files (x86)\Gnu
軟體開發過程中測試用例圖、E-R圖的理解和使用
研一上學學期分別修了《軟體工程》、《面向物件分析和設計》兩門課程,雖然沒有認真聽講。但是知道要想在該專業領域走的更遠,有全域性觀念。這門課程還是相當重要的。尤其是用例圖和關係實體圖,對於從全域性快速的
軟體開發過程中使用Visio用例總結
物理3D架構圖 網路->網路和外設-3D,如下圖所示: 物理平面架構圖 軟體和資料庫->web圖表->網站總體設計形狀,如下圖所示: 類圖 軟體和資料庫->軟體->UML類,如下圖所示: 網站功能模組架構圖 軟體和資料庫-&g
基於vue框架專案開發過程中遇到的問題總結(一)
(一)關於computed修改data裡變數的值 問題:computed裡是不能直接修改data裡變數的值,否則在git commit 時會報錯 解決:在computed裡使用get和set來進行獲取和修改data變數,(參考下圖) (二)computed裡監聽陣列
開發過程中,我用過的一些簡單粗暴的外掛
一、idea 外掛 Mybatis log plugin 作用:可以自動將sql的引數自動拼接到sql中 2.MyBatisCodeHelperPro 作用:可以通過Mapper介面的某個抽象方法自動跳轉到Mapper.xml檔案對應的sql ,反過來也可
Android 開發過程中平時遇到的一些問題及總結
相信大家都有面試的經歷,相對比面試官的問的一些問題其實都是基礎的知識,但就是一些基礎的知識我們也不是很完美的回答出來,我們也知道現在的開發人員很多,一家公司一個崗位就會有很多的開發者投遞,在那麼多開發者中你如何讓面試官很深的認識你,給面試官一個很深的印象,能讓他
Android外掛化開發過程中遇到的問題總結
最近接手的一個專案,是在外掛分支裡開發一個功能。但是寫過demo之後,發現同樣的程式碼在專案中執行不起來。在此過程中遇到的問題總結一下,以便以後遇到同樣的問題直到問題出在哪。 一、四大元件的註冊 四大元件的使用是一定要宣告的,尤其是要在主站中宣告。並且在外掛化開發的過程中
安卓開發過程中遇到的問題總結及解決方法
1、每次從github同步程式碼的時候R會變紅 2、佈局檔案顯示不出效果 解決方法:降低API的版本為23或22 3、Android中SwipeRefreshLayout和listview的衝突 4、FloatingActionButton的使用
公司開發過程中遇到的問題總結(一)
來公司已經兩個多月了,之前一直忽略了文件的積累,經過公司大佬貓哥的帶領下,我才慢慢意識到優秀的文件到底是什麼樣? 如果說生活是一門藝術,那麼每天的文件記錄是程式設計師生活中的一首高昂的讚歌!! 自己寫的工具類在測試時候報錯, org.springfra
微信小程式開發過程中總結的注意事項
1、picker從後臺動態取值 <picker bindchange="bindPickerChange" value="{{index}}" range="{{array}}"> <view class="picker">
swift 開發過程中的一些小總結
import FoundationextensionString {var md5 : String{let str = self.cString(using:String.Encoding.utf8)let strLen = CC_LONG(self.lengthOfBytes(using:Str
WEB開發過程中遇到的各種問題及解決方法總結
A:把MySQL的jar包放在Tomcat安裝目錄下的lib資料夾下 ------------------------------------------------------------------------------------------------ Q:The server does n
軟體開發過程中的文件總結
(一)、在系統軟體的開發前期,需要的文件有: 1.系統開發立項報告,需要包含的: (a).專案的定位及價值 (b).開發中的主要難點及可能出現的問題 (c).時間規劃及人員安排 2.系統設計原理,需要包含: (a).總體框架 (b).實現原理 (c).存
Android中so使用知識和問題總結以及外掛開發過程中載入so的方案解析
一、前言 Android中有時候為了效率以及平臺開發庫的支援,難免會用到NDK開發,那麼都會產生一個so檔案,通過native方法進行呼叫,開發和呼叫步驟很簡單,這裡就不多說了,本文主要來介紹,我們在使用so的時候總是會出現一些常見的問題,而現在外掛化開發也很普遍了,有
據說這篇總結覆蓋了一般Python開發面試中可能會問到的大部分問題
點選上方“程式人生”,選擇“置頂公眾號”第一時間關注程式猿(媛)身邊的故事原文標題:一名pyth
android專案開發過程中的本地快取總結
在現在很多的開發中,開發一個app快取和網路儲存搭配起來使用往往是必須的,自己寫過比較多的專案所有談談感想。 快取作用: 所謂的快取機制就是資料獲取方式的變化,app的快取通常就是把使用者經常需要從網路上載入並且變化不是事實的資料進行本地的儲存,這樣可以減少使用者流量的使用
實際開發過程中使用的的技術總結
過程 mybatis 總結 語法 行數據 pri 進行 mysq bit 1.開發使用Java技術進行a.基礎的語法是必須的2.數據庫采用MySQLa.數據庫的SQL語法是必須的b.存儲過程c.定時任務執行3.框架使用SpringBoot作為基礎框架4.在框架基礎上使用JP
總結軟體開發過程中最常犯的10個問題
先總結一下Top10吧 Array轉ArrayList 判斷一個數組是否包含某個值 在迴圈內部刪除List中的一個元素 HashTable與HashMap 使用集合原始型別(raw type) 訪問級別 ArrayList和LinkedList 可變與不可變 父類和子類的構造方法 “”還是構造方法 這個