爬蟲:請求網站並提取資料的自動化程式
請求 - 響應(HTML、Json字串、二進位制資料(圖片、視屏)等) - 解析 - 儲存
- 請求
- 方式(主要GET、POST)
- URL
- 請求頭(如User-Agent,Host,Cookies(保持登入會話)等)
- 請求體(From Data是一部分))
- 響應
- 狀態(200, 301(跳轉), 404, 502)
- 響應頭(設定Cookie等)
- 響應體(請求內容,如HTML、圖片等)
Beautiful Soup(beautifulsoup4)
-
引用 from bs4 import BeautifulSoup
-
對變數進行判斷的時候import bs4
-
Beautiful Soup解析器
解析器 使用方法 條件 bs4的HTML解析器 BeautifulSoup(mk,'html.parser') 安裝bs4庫 lxml的HTML解析器 BeautifulSoup(mk,'lxml') pip install lxml lxml的XML解析器 BeautifulSoup(mk, 'xml') pip install lxml html5lib的解析器 BeautifulSoup(mk, 'html5lib') pip install html5lib -
Beautiful Soup類的基本元素
基本元素 說明 Tag 標籤,最基本的資訊組織單元,分別用<>和</>標明開頭和結尾 Name 標籤的名字,<p>...</p>,格式是<tag>.name Attributes 標籤的屬性,字典形式組織,格式:<tag>.attrs NavigableString 標籤內非屬性字串,<>...</>中字串,格式:<tag>.string Comment 標籤內字串的註釋部分,一種特殊的Comment型別
正規表示式
- 正規表示式的常用操作符
操作符 | 說明 | 例項 |
---|---|---|
. | 表示任何單個字元 | |
[]] | 字符集,對單個字元給出取值範圍 | [abc]表示a、b、c,[a-z]表示a到z單個字元 |
[^] | 非字符集,對單個字元給出排除範圍 | [^abc]表示非a或非b或c的單個字元 |
* | 前一個字元0次或無限次擴充套件 | abc*表示ab、abc、abcc、abccc等 |
+ | 前一個字元1次或無限次擴充套件 | abc+表示abc、abcc、abccc等 |
? | 前一個字元0次或1次擴張 | abc?表示ab、abc |
| | 左右表示式任意一個 | abc|def表示abc、def |
{m} | 擴充套件前一個字元m次 | ab{2}c表示abbc |
{m,n} | 擴充套件前一個字元m至n次(含n) | ab{1,2}c表示abc、abbc |
^ | 匹配字串開頭 | ^abc表示abc且在一個字串的開頭 |
$ | 匹配字串結尾 | abc&表示abc且在一個字串的結尾 |
() | 分組標記,內部只能使用|操作符 | (abc)表示abc,(abc|def)表示abc、def |
\d | 數字,等價於[0-9] | |
\w | 單詞字元,等價於[A-Za-z0-9_] |
- 正規表示式語法例項
正規表示式 | 對應的字串 |
---|---|
p(Y|YT|YTH|YTHO)?N | 'PN' 'PYN' 'PYTN' 'PYTHN' 'PYTHON' |
PYTHON+ | 'PYTHON' 'PYTHONN' 'PYTHONNN' ... |
PY[TH]ON | 'PYTON' 'PYTHON' |
PY[^TH]?ON | 'PYON' 'PYaON' 'PYbON' 'PYcON'... |
PY{:3}N | 'PN' 'PYN' 'PYYN' 'PYYYN' |
- 經典的正規表示式
正規表示式 | 對應的字串 |
---|---|
^[A-Za-z] + $ | 由26個字母組成的字串 |
^[A-Za-z0-9] + $ | 由26個字母和數字組成的字串 |
^-?\d + $ | 整數形式的字串 |
^[0-9]*[1-9][0-9]*$ | 正整數形式的字串 |
[1-9]\dd{5} | 中國境內郵政編碼,6位 |
[\u4e00-\u9fa5] | 匹配中文字元 |
\d{3}-\d{8}|\d{4}-\d{7} | 國內電話號碼,010-68913536 |
- 匹配IP地址的正規表示式
0-99: [1-9]?\d
100-199: 1\d{2}
200-249: 2[0-4]\d
250-255: 25[0-5]