程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python3.6。爬蟲學習入門筆記

編輯:Python

爬蟲

  • 前提知識:
    • URL
    • HTTP協議
    • web前端,html css js
    • ajax
    • re,Xpath
    • XML

爬蟲的定義

  • 百度上詳細的介紹
  • 三大步驟:
    • 下載信息
    • 提取正確的信息
    • 根據一定的規則自定跳到另外的網頁上執行的兩步內容
  • 爬蟲分類
    • 通用爬蟲
    • 專用爬蟲
  • pyhon網絡包簡介
    • 2.X ----
    • 3.x----urllib,urllib3,httplib2,requests

urllib

  • 包含模塊
    • urllib.request:打開和讀取模塊的urls
    • urllib.error:包含urllib.request產生的常見錯誤,使用try捕捉
    • urllib.parse: 包含即系url的方法
    • urllib.robotparse:解析robots.txt文件
    • 案例V1
  • 網頁編碼問題解決
    • chardet 可以自動檢測網頁的編碼格式,但是可能有誤
    • 需要安裝 conda install chardet
    • 案列V2
  • urlopen的返回項
    • geturl:返回請求對象
    • info:請求返回對象的meta對象
    • getcode:返回對象的請求狀態碼
  • request.code
    • 訪問網絡的兩種方法
      • get:實際上利用參數給服務器傳遞信息,參數用dict,然後用parse編碼
      • post:一般使用的服務器傳遞參數的方式
        • post是把信息自動加密
        • 如果使用post信息需要用到data參數
        • 使用post意味著Http的請求頭可以需要更改:
          • Content-Type:applocation/x-www.from-urlencode
          • Content-Length:數據長度
          • 也就是說,一旦更改請求方法,需要注意其他請求頭部信息相適應
        • urllib.parse,urlencode可以將上字符串改為網絡協議的
        • 案例V4
      • 案例V4
      • 為了更多的設置我們的請求信息,單純的使用urlopen已經不是很好用了
      • 需要利用request.Request()類
      • 案例V6
    • urllib.error:
      • 產生原因:
        • 沒網
        • 服務器鏈接失敗
        • 不知道指定的服務器
        • 是osError的子類
        • 案例V7
    • HTTPError:是URLError的一個子類
    • 案例V8
    • UserAgent
      • UserAgent:用戶代理簡稱UA,屬於Headers的一部分,服務器通過UA來判斷訪問者的身份
    • 設置UA可以使用
    • heads
    • add_heads
    • 案例V9
  • ProxyHandler 代理服務器
    • 使用代理IP,爬蟲的常用手段
    • 獲取代理服務器的地址:
      • www.xicidaili.com
      • www.goubanjian.com
    • 代理用來隱藏真實訪問匯總,代理也不允許頻繁訪問某一個固定網站,所以代理一定要很多
    • 基本使用代理的設置:
      • 設置代理地址
      • 創建ProxyHandler
      • 創建Opener
      • 安裝Opener
      • 案例V10

cookie & session

  • 由於http協議的無記憶性,人們為了彌補這個缺憾,所采用的一個補充協議
  • cookie是發送給用戶的一半信息,session是保存在服務器的另一半的信息,用來記錄信息
  • cookie和session的區別:
    • 存放位置不同
    • cookie不安全
    • session會在服務器上一段時間,會過期的
    • 單個cookie保存不超過4K,很多浏覽器限制一個站點最多為20個
  • session 存放位置
    • 存放在服務器
    • 一般情況,session是存放在數據庫中
  • cookie 登陸
  • 模擬登陸人人網
  • V11
  • 使用Cookie登陸
    • 直接把cookie復制下來,然後手動放入請求頭
    • V12
    • http模塊包含我們可以使用的cookie的模塊,自動使用cookie
      • CookieJar
        • 管理存儲Cookie,向傳出的http請求添加Cookie
        • cookie存儲在內存裡,CookieJar實例回收後cookie將消失
      • FileCookieJar
        • 使用文件管理cookie
        • filename是保存Cookie的文件
      • MozillaCookieJar
        • 創建Mozilla浏覽器Cookie.txt兼容的FileCookieJar實例
      • LwqCookieJar
        • 創建於libwww-perla標准兼容的Set-Cookie3格式的FileCookieJar
      • 他們的關系是:Cookie Jar–>FileCookieJar–>MozillaCookieJar&LwqCookieJar
      • 利用Cooke Ja訪問人網
      • 案例13
        • 自動使用Cookie登陸
        • 打開登陸界面後自動通過賬戶密碼登陸
        • 自動提取反饋的Cookie
        • 利用提取的Cookie登陸隱私頁面
        • handler是Headler的實例
          • 常用的有
          • 創建cookie實例
        • cookie = cookiejar.CookieJar()
        • 生成cookie的管理器
        • cookie_handler = request.HTTPCookieProcessor(cookie)
      • 創建http請求管理器
        • http_handler = request.HTTPHandler()
      • 生成http管理器
        • https_handler = request.HTTPSHandler()
      • 創建請求管理器
        • opener = request.build_opener(http_handler,https_handler,cookie_handler)
      • 創建handler後,使用opener打開,打開後相應的handler進行使用
      • cookie作為一個變量打印出來
      • 案例V14
      • cookie屬性
        • name :名稱
        • value:值
        • domain :可以訪問此cookie的域名
        • path:看可以訪問的cookie的頁面路經
        • expirse:過期信息
        • size:大小
        • http字段
      • cookie的保存—FileCookieJar
        • 案例15
      • cookie的讀取
        • 案例16

SSL

  • SSL證書就是指 遵守SSL安全套結層協議的服務器數字證書
  • CA(CertifacateAuthority)是數字認證中心
  • 遇到不信任的SSL證書處理方法
  • 案例V17

JS加密

http://tool.oschina.net

  • 有的反爬蟲策略采用js對於傳輸的數據進行加密通常是md5值
  • 經過加密就是密文但是,加密函數或者過程一定是在浏覽器完成,也就是將JS的代碼暴露給使用人
  • 通過閱讀加密算法,就可以模擬出加密過程,從而進行破解
  • 案例V18
  • 使用V18和V19進行對比
  • 記住JS一定被保存在本地,然後去找加密算法

AIAX

  • 實質就是一段js代碼,是我們的網頁進行異步請求
  • 一定會有url,請求方法
  • 使用一般的json格式
  • 案例20
  • 一般GET方式使用的參數的形式發送
  • post使用的是form的方法,也方便於加密

Requests 模塊憲哥人類的模塊

  • 繼承了urlllib的所有方法
  • 底層使用了urllib3
  • 開源
  • 有中文的地址
  • 安裝 pip install request
  • get請求:
    • request.get(url)
    • request.request(‘get’,url)
    • 可帶有headers和parmas參數
    • 案例21
  • get的返回內容
    • 案例22
  • post
    • rsp = resquest.post(url,data)
    • 案例23
    • data,headers要求是dict類型
  • proxy 代理
    • proxy = {
      “http”:“地址”
      “HTTPs”:‘地址’
      }
      rsp = requests.request(“get”,“http::…”,proxies=proxy)
  • 用戶驗證
    • 代理驗證
      • 可能使用的HTTP basic Auth可以這樣
      • 格式就是用戶名:密碼@代理地址:端口號
      • proxy = {“http”:“china:[email protected]:8888”}
      • res = request.get(“http://www.baidu.com”,proxies=proxy)
  • web 客戶端驗證
    • 如過遇到需要驗證就是添加auth=(用戶名,密碼)
    • autu=(“用戶名”,‘’密碼"’)
    • res = request.get(“http://www.baidu.com”,auth=autu)
  • cookie
    • request可以自動處理cookie信息
      • rsp = requests.get(url)
      • 如果對方服務器傳送過來cookie信息,則可以考慮反饋的cookie屬性得到的,返回一個cookie的實例
      • cookieJar = rsp.cookies
      • 可以將cookie轉換成字典
      • cookiedict = requests.utils.dict_from_cookiejar(cookieJar)
  • session
    • 和服務器上的session不一樣啦
    • 模擬一次會話,從客戶端歷覽器開始鏈接服務器,到客戶端斷開
    • 能讓我我們跨請求時保持某些參數,比如說在同一個session實例發出的有的請求之間cookie
      • 創建session對象時候,可以保存cookie值
      • ss = requests.session()
      • headers = {“User-Agent”:“XXXXXXx”}
      • data = {“name”:“XXXXXXx”}
      • 此時有創建的session管理請求,負責發出請求
      • ss.post(“http://www.baidu.com”, data=data,headers=headers)
      • rsp = ss.get(“XXXXXX”)
  • https驗證SSL證書
    • 參數verify負責表示是否需要SSL 證書,默認需要TRUE
    • 如果不需要SSL證書驗證,則false
      • rsp = requests.get(“https:”,verify=false)

爬蟲數據的處理

  • 結構數據:先有結構,再談數據
    • json文件
      • json Path
      • 轉換成相應的Python類型操作(json類)
    • XML
      • 轉換成python的類型(xmtodict)
      • Xpath
      • CSS選擇器
      • 正則
  • 非結構數據:先有數據,再談結構
    • 文本
    • 電話號碼
    • 郵箱地址
    • 通常處理這種數據時使用正則表達式
    • Html文件
      • 正則
      • Xpath
      • CSS選擇器

正則表達式

  • 一套股則,可以在字符串文本中搜查替換等等
  • 案例24,基本的正則的使用規則
  • 案例match的基本使用
  • 常用的方法:
    • match :從開始位置查找,只匹配一次
    • search: 從任何位置開始查找,一次匹配
    • findall:全部查找,返回列表
    • finditer:全部匹配,返回迭代
    • spilt:分割字符,返回列表
    • sub:替換
  • 匹配中文
    • 匹配Unicode范圍主要在【u4e00-u9fa5]
    • 案例V27
  • 貪婪於非貪婪
    • 貪婪模式:在整個表達式或者匹配成功的前提下,盡可能多的匹配
    • 非貪婪模式:盡可能少的匹配

XML

  • XML(ExtensibilityleMarkLanguage)
  • http://www.w3cschool
  • 案例V28
  • 概念;父節點,子節點,先輩節點,兄弟節點,後代節點

Xpath

  • Xpath(XML Path language)
  • w3school
  • 常用路徑表示式

lxml庫

  • 案例29
  • 解析html
  • 文件讀取 html
  • etree和xpath配合使用
  • 案例V31

CSS選擇器 beatifulsoup4

幾種工具的比較

- 正則:快,不好用不用安裝
- beatifulsoup 慢使用簡單
- lxml: 比較快
  • 使用beatifulsoup的案例
  • 案例V32

beautifulSoup

  • 四大對象
    • Tag
    • NavigableString
    • Beautifulsoup
    • Comment
  • Tag
    • 對應HTML標簽
    • 通過soup,tag_name()
    • tag兩個重要
      • name
      • 屬性
    • 案例V33
  • NavigableString
    • 對應內容值
  • Beautifulsoup
    • 表示一個文檔的內容
  • comment
    • 特殊的NavigableString對象
    • 對其輸出,則內容不包括注釋符號
  • 遍歷對象
    • contents: tag的子節點列表的方式輸出
    • children:子節點義迭代的形式返回
    • descendants:所有孫節點、
    • string
    • 案例34
  • 搜索文檔對象
    • find_all(name,arrts,recursive,text,** kwaargs**)
    • name:按照字符串搜索,可以收入的內容
      • 字符串
      • 正則表達式
      • 列表
    • keywortd參數,表示屬性
    • text :對應tag的文本值
  • CSS選擇器

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved