日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【爬虫笔记】爬虫基础

發布時間:2025/3/19 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【爬虫笔记】爬虫基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 一、技術選型
    • 二、網頁分類
    • 三、正則表達式
    • 四、深度優先和廣度優先
      • 1、網站的樹結構
      • 2、深度優先算法和實現
      • 3、廣度優先算法和實現
    • 五、爬蟲去重策略
    • 六、字符串編碼
      • 1、發展
      • 2、轉換

爬蟲基礎

  • 正則表達式
  • 深度優先和廣度優先遍歷算法
  • url去重的常見策略

爬蟲應用

  • 搜索引擎——baidu、Google、垂直領域搜索引擎(知道爬什么內容什么網站)
  • 推薦引擎——toutiao
  • 機器學習的數據樣本
  • 數據分析(eg:金融數據分析)、輿情分析等

一、技術選型

技術選型:scrapy + requests
scrapy vs. requests + beatuifulSoup

  • requests和beatuifulSoup都是庫,scrapy是框架
  • scrapy框架中可以加入requests和beatuifulSoup
  • scrapy基于twisted,性能優勢大
  • scrapy易于擴展,提供很多內置功能
  • scrapy內置css和xpath selector非常方便,beatuifulSoup慢

二、網頁分類

常見類型的服務

  • 靜態網頁
  • 動態網頁
  • webservice(restapi)

三、正則表達式

對爬蟲的內容進行處理,eg:5天前==》2019.04.30

特殊字符

  • ^ $ * ? {2} {2, } {2, 5} |
  • [] [^] [a-z] .
  • \s \S \w \W
  • [\u4E00-\u9FA5] () \d


# -*- coding:utf-8 -*- import reline = "XXX出生于2005年5月5日" line = "XXX出生于2005年5月" line = "XXX出生于2005/5/5" line = "XXX出生于2005-5-5" line = "XXX出生于2005-05-05"regex_str = ".*出生于(\d{4}[年/-]\d{1,2}([月/-]\d{1,2}[日]|[月/-]\d{1,2}|[月/-]$|$))" match_obj = re.match(regex_str, line) if match_obj:print(match_obj.group(1))

四、深度優先和廣度優先

1、網站的樹結構

網站url的結構圖

網站url鏈接的結構圖

2、深度優先算法和實現


輸出:A、B、D、E、I、C、F、G、H
==》遞歸實現

def depth_tree(tree_node):if tree_node is not None:print(tree_node._data)if tree_node._left is not None:return depth_tree(tree_node._left)if tree_node._right is not None:return depth_tree(tree_node._right)

3、廣度優先算法和實現


輸出:A、B、C、D、E、F、H、G、I
==》隊列實現

def level_tree(root):if root is None:returnmy_queue = []node = rootmy_queue.append(node)while my_queue:node = my_queue.pop(0)print(node._data)if node._left is not None:my_queue.append(node._left)if node._right is not None:my_queue.append(node._right)

五、爬蟲去重策略

常用方法

  • 將訪問過的url保存到數據庫中
  • 將訪問過的url保存到set中,只需要o(1)的代價就可以查詢url。(內存占用越來越大)
  • url經過md5等方法哈希后保存到set中
  • 用bitmap方法,將訪問過的url通過hash函數映射到某一位(沖突高)
  • bloomfilter方法對bitmap進行改進,多重hash函數降低沖突。
  • 六、字符串編碼

    Unicode、utf-8

    1、發展

    • 計算機只能處理數字,文本轉換為數字才能被處理,計算機中8個bit作為一個字節,所以一個字節能表示最大的數字就是255.
    • 計算機是美國人發明的,所以一個字符就可以表示所有字符了,所以ASCII(一個字節)編碼就成為美國人的標準編碼
    • 但是ASCII處理中文明顯不夠,中文不止255個漢字,所以中國定制了GB2312編碼,用兩個字節表示一個漢字。GB2312還把ASCII包含進去;同理,日文、韓文等上百個國家為了該問題都創建了一套字節的編碼。隨著標準越來越多,若出現多種語言混合顯示就一定會出現亂碼。
    • 將所有語言統一到一套編碼中——Unicode(兩個字節)
    • 雖然解決了亂碼問題,但是若內容全為英文,則Unicode編碼比ASCII需要多一倍的存儲空間,同時若傳輸也需要多一倍的傳輸。
    • 解決方法:utf-8(可變長的編碼),將英文變成一個字節,漢字三個字節,特別生僻的變成4-6個字節。 若傳輸大量的英文,utf-8的作用就明顯了。

    2、轉換



    python3

    • 文件默認編碼是utf-8 , 字符串編碼是 unicode
    • 以utf-8 或者 gbk等編碼的代碼,加載到內存,會自動轉為unicode正常顯示。

    python2

    • 文件默認編碼是ascii , 字符串編碼也是 ascii , 如果文件頭聲明了是gbk,那字符串編碼就是gbk。
    • 以utf-8 或者 gbk等編碼的代碼,加載到內存,并不會轉為unicode,編碼仍然是utf-8或者gbk等編碼。

    總結

    以上是生活随笔為你收集整理的【爬虫笔记】爬虫基础的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。