爬蟲知識點總結

知識點總結

  • requests模塊html

    • 爬取數據流程: -
    • get,post做用:
    • get,post參數:
      • url
      • headers
      • data/params
      • proxies
    • 處理ajax動態加載的數據: -
    • 模擬登錄:
      • 獲取點擊登陸按鈕發起的post請求(請求參數)
    • 打碼平臺使用:
      • 開發者用戶:
        • 建立一個軟件(id,祕鑰)
        • 下載示例代碼(PythonHTTP)
          • 超時時間:20s
    • cookie的處理:
      • 自動處理:requests.getSession()
      • 手動處理:headers
    • 代理ip:面試

      • 購買代理(價位):快代理 西祠代理
      • HTTPConnectionPool:
        • 1.使用代理ip
        • 2.sleep
        • 3.Connection:'close'
        • requests模塊單線程爬取300w數據耗時90min左右
    • 線程池:ajax

      • dummy.Pool.map()
    • 圖片懶加載:僞屬性
  • 數據解析
    • 正則表達式:
    • bs4:
      • find('tagName',attrName='value')
      • select('選擇器') > 空格
      • soup.tagName
      • 取文本:string text get_text()
    • xpath:
      • 解析原理:
        • 1.實例化對象且將頁面源碼數據加載到該對象中
        • 2.相關的機制實現標籤的定位
        • 3.取文本或者取屬性
      • xpath函數中必須做用一個xpath表達式(xpath插件)
      • xpath函數的返回值:列表
      • 局部數據解析:li.xpath('./')
  • selenium
    • 做用:模塊中提供了能夠讓瀏覽器實現自動化的操做的接口
    • 使用流程:
      • 1.實例化某一款瀏覽器對象(瀏覽器驅動程序)
      • 2.調用get函數打開某一個頁面
      • 3.執行其餘自動化的操做
        • find系列的函數:find_element_by_id
        • send_keys,click,excute_script(js)
      • 4.page_source
    • find系列函數:
    • switch_to.frame(iframe的id屬性值)函數
    • phantomJs:
    • 谷歌無頭瀏覽器:
  • scrapy正則表達式

    • 項目建立流程:
      • name
      • start_urls
      • parse(self,response)
    • 持久化存儲:
      • 1.基於終端指令:
        • 只能夠將parse方法的返回值表示的數據進行持久化存儲
        • 基於管道
          • 1.解析數據
          • 2.封裝到item類型的對象
          • 3.提交item(yield)
          • 4.在process_item方法中接收item且進行數據的持久化存儲
          • 5.開啓管道(settings)
          • 注意:process_item open_spider close_spider
            • process_item函數的返回值做用:就能夠將item給下一個管道類
    • 處理分頁數據爬取:
      • 手動請求的發送:yiled scrapy.Request(url,callback)
    • post請求:
      • start_request()
      • yiled scrapy.FormRequest(url,formdata,callback)
    • cookie處理:
      • 自動處理
    • 日誌等級:
      • INFO,ERROR,DEBUG
      • LOG_LEVEL = 'ERROR'
      • LOG_FILE = './log.txt'
    • 請求傳參:
      • 場景:爬取的數據不在同一張頁面中
      • yiled scrapy.Request(url,callback,meta={'item':item})
      • 接收:item = response.meta['item']
    • 五大核心組件原理:
      • spider:產生url 進行數據解析
      • 管道:持久化存儲
      • 下載器:進行網絡數據的下載
      • 調度器:
        • 去重
        • 調度url
      • 引擎:
        • 對數據流的處理
        • 觸發事務
    • 下載中間件:redis

      • 下載中間件:攔截請求和響應
      • 攔截請求:瀏覽器

        • UA假裝:cookie

          • process_request(self,request,spider): request.headers['User-Agent'] = 'xxx'
        • 代理ip的設置:網絡

          • process_exception(self,request,spider): if request.url.split(:)[0] == 'http'
            request.meta['proxy'] = 'http://ip:port'
            else:
            request.meta['proxy'] = 'https://ip:port'
    • UA池和代理池:
    • selenium在scrapy中的應用:
      • 1.在爬蟲文件的構造方法中實例化一個瀏覽器對象
      • 2.在爬蟲文件的closed(self,spider)關閉瀏覽器對象
      • 3.在下載中間件的process_response(self,request,response,spider)編寫瀏覽器自動化的操做代碼
      • 4.return HtmlResponse(body=bro.page_source)
    • crawlSpider:
      • 做用:全棧數據的爬取
      • 基於crawlSpider的爬蟲文件的建立:scrapy genspider -t crawl xxx www.xxx.com
      • 連接提取器:根據指定規則(allow='正則')進行鏈接的提取
      • 規則解析器:將連接提取器提取到的鏈接進行請求的發送而且根據指定規則對頁面數據進行解析.
        • follow:True
  • 分佈式併發

    • scrapy爲什麼不能實現分佈式:
    • scrapy-redis的做用:
    • 實現分佈式的方式:
    • 流程:
  • 增量式爬蟲:
    • 去重
    • 數據指紋
 

案例總結

- 爬取肯德基餐廳位置信息:http://www.kfc.com.cn/kfccda/index.aspx
- 爬取藥監總局:http://125.35.6.84:81/xk/
- 爬取糗事百科圖片:https://www.qiushibaike.com/pic/
- 下載免費簡歷模板:http://sc.chinaz.com/jianli/free.html
- 煎蛋網圖片爬取:http://jandan.net/ooxx
- 解析城市名稱:https://www.aqistudy.cn/historydata/
- 古詩文網:https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx
- 網易新聞:https://news.163.com/
 

反爬機制總結

  • robots.txt
  • UA檢測
  • 驗證碼
  • 數據加密
  • cookie
  • 禁IP
  • 動態token
  • 數據動態加載
 

數據清洗

  • 空值檢測刪除空值所在的行數據:
    • dropna(axis=0)
  • 空值檢測填充空值:
    • fillna(method='ffill/bfill',axis=0)
  • 異常值檢測和過濾:
    • 斷定異常值的條件:
    • replace(to_replace,value)
  • 重複行檢測和刪除:
    • drop_duplicated(keep)
 

面試題

  • 如何提高爬蟲的效率
    • 線程池
    • scrapy配置文件相關配置(禁用cookie,禁止重試,減少下載超時,增長併發,日誌等級)
  • scrapy核心組件工做流程
  • scrapy中如何設置代理(兩種方法)
    • 中間件
    • 環境變量(os.environ['HTTPS_PROXY'] = 'https:ip:port')
  • scrapy如何實現限速
    • DOWNLOAD_DELAY = 1
  • scrapy如何實現暫停爬蟲
    • JOBDIR='sharejs.com'
    • control-C
  • pipeline如何丟棄一個item對象
  • scrapy-redis組件做用
  • 實現深度和廣度優先:默認爲深度優先。
    • DEPTH_PRIORITY = 1
    • SCHEDULER_DISK_QUEUE = 'scrapy.squeues.PickleFifoDiskQueue'
    • SCHEDULER_MEMORY_QUEUE = 'scrapy.squeues.FifoMemoryQueue'
    • 廣度優先:不所有保留結點,佔用空間少;運行速度慢
    • 深度優先:保留所有結點,佔用空間大;運行速度快
相關文章
相關標籤/搜索