1. 爬蟲的選取:scrapy和requests+beautifuisoup
scrapy是框架,而requests和beautifulsoup是庫。scrapy框架是可以加如requests和beautifulsoup庫的,而scrapy是基於twisted,效能是最大的優勢。scrapy方便擴充套件,提供很多內建的功能。scrapy內建的css和xpath selector非常方便,beautifulsoup就是有點慢。
2.常見網頁分類
靜態網頁,動態網頁、webservice
3.爬蟲能做什麼
2)推薦引擎---今日頭條
3)機器學習的資料樣本
4)資料分析(如金融資料分析)、輿情分析等
4.正規表示式
1)特殊字元(^)
**:import re
"""1)^"必須是^後面的字元"
2) .是除了\n的任意字元
3) *是乙個限定符,用來修飾前乙個字元或分組,限定匹配重複的數量為任意數量。
"""#」^「、」.「、」×「測試
test_str = "zzbaby"
reg_str = "^b.*"
if re.match(reg_str,test_str):
print("yes")
else:
print("no")
結果:no
2)特殊字元($)
**:
"""3)特殊字元(?)1)$"表示必須有以$前面的字元結尾"
"""reg_str_1 = ".*y$"
if re.match(reg_str_1,test_str):
print("yes")
else:
print("no")
結果:yes
**:
"""1)?表示非貪婪模式
"""
test_str = "zbbbbbbzzbaby"
reg_str_2 = ".*?(z.*?z).*"#?表示從左邊開始匹配遇到第乙個z就開始進入匹配第二個?表示不要貪婪太多隻需要匹配遇到第二個z就結束if re.match(reg_str_2,test_str):
print(re.match(reg_str_2,test_str).group(1))#表示提取第一次符合reg_str_2的字元,正規表示式是反向匹配的
else:
print("error")
結果:zbbbbbbz
4)特殊字元+
**:
"""1)+是乙個限定符,用來修飾前乙個字元或分組,限定匹配重複的數量至少為一次數量。
"""reg_str_3 = "(.+.*)"#正規表示式預設是貪婪模式
if re.match(reg_str_3,test_str):
print(re.match(reg_str_3,test_str).group(1))#表示提取第一次符合reg_str_2的字元,正規表示式是反向匹配的
else:
print("error")
結果:zbbbbbbzzbaby
5)特殊字元{}
**:
"""zbb1)表示大括號裡面出現的數字是前面出現的次數
2)表示大括號數值以上的次數
3)表示2次以上5次以下
"""reg_str_4 ="(..)"#表示出現前兩個字元
reg_str_5= "(.+b)"#表示b前面要至少有乙個字元後匹配2個以上的b
reg_str_6= "(.+b)"#表示b前面要至少有乙個字元後匹配1個以上的b,6個以下的b
print(re.match(reg_str_4,test_str).group(1))#表示列印前兩個字元
print(re.match(reg_str_5,test_str).group(1))#表示兩次以上的字元,由於貪婪所以會列印最長
print(re.match(reg_str_6,test_str).group(1))#列印的是在b之前至少存在1個字元而且b出現的次數在1次以上6次以下
結果:
zbbbbbb
zbbbbbb
6)特殊字元|
**:
"""1)表示或者的意思
"""reg_str_7 = "(zz|zb)"#提取zz或者zb優先左邊列印
print(re.match(reg_str_7,test_str).group(1))#group中的數字代表的是括號的層數,常常用於提取子字串
結果:zb
7)特殊字元**:"""
1)相當於只能輸入中的字元
2)有一種使用方法[0-9]只能輸入0-9之間的資料
3)還有一種使用方法[^1]表示只能輸入不是1的資料
"""#的前一種使用方式
print("請輸入乙個**號碼:")
#test_str = input()
reg_str_1 ="1[3578][0-9]"#表示第二位只能輸入3、5、8、7的數值,[0-9]則表示輸入1-9之間的資料
if re.match(reg_str_1,test_str):
print(test_str)
else:
print("error")
#[^]的使用方法
print("輸入乙個最後不為1的**號碼:")
test_str = input()
reg_str_1 ="1[3578][0-9][^1]"#表示第二位只能輸入3、5、8、7的數值,[0-9]則表示輸入1-9之間的資料,最後一位不能為1
if re.match(reg_str_1,test_str):
print(test_str)
else:
print("error")
輸出:請輸入乙個**號碼:
error
輸入乙個最後不為1的**號碼:
15837140221
error
8)特殊字元\s
**:
"""你 好1)\s表示匹配乙個空格
2)\s表示只要不是空格都可以
3)\w表示任意乙個字元都可以[a-za-z0-9_]都可以
4)\w表示與\w相反
"""#\s的作用
test_str ="你 好"#漢字
test_str_1 ="hh aa"#英文
reg_str_8 ="你\s好"
reg_str_9 = "hh\saa"
if re.match(reg_str_8,test_str):
print(test_str)
if re.match(reg_str_9,test_str_1):
print(test_str_1)
else:
print("error")
#\s的作用與\s的作用相反
test_str ="hhsaa"#英文
reg_str_10 = "hh\saa"
if re.match(reg_str_10,test_str):
print(test_str)
else:
print("error")
#\w的使用方式
test_str ="hh@aa"#英文
reg_str_11 = "hh\waa"#\w相當於[a-za-z0-9_]
if re.match(reg_str_11,test_str):
print(test_str)
else:
print("error")
#\w的使用方式與\w相反
test_str ="hh@aa"#英文
reg_str_12 = "hh\waa"#\w相當於[a-za-z0-9_]相反
if re.match(reg_str_12,test_str):
print(test_str)
else:
print("error")
輸出結果:
hh aa
hhsaa
error
hh@aa
9)特殊字元[\u4e00-\9fa5]
**:
"""1)[\u4e00-\u9fa5]只識別漢字
"""test_str ="你好"#漢字
reg_str_13 = "[\u4e00-\u9fa5]+"
if re.match(reg_str_13,test_str):
print(test_str)
else:
print("error")
執行結果:
你好10)特殊字元\d
**:
"""1)\d代表的數字
"""test_str = "aaaaaa123"
reg_str_13 = ".*(.+[2]\d).*"#提起123
if re.match(reg_str_13,test_str):
print(re.match(reg_str_13,test_str).group(1))
else:
print("error")
結果:123
Python爬蟲簡述系列之一
根據使用場景,網路爬蟲可分為通用爬蟲和聚焦爬蟲兩種.搜尋引擎網路爬蟲的基本工作流程如下 1,首先選取一部分的種子url,將這些url放入待抓取url佇列 3,分析已抓取url佇列中的url,分析其中的其他url,並且將url放入待抓取url佇列,從而進入下乙個迴圈 在其他 上設定新 外鏈 盡可能處於...
python爬蟲之一 基本架構
排程器 呼叫其他元件,並控制目標資料輸出 url管理器 儲存待爬取 已爬取url,要防止爬取重複的url 網頁解析器 解析html頁面中的文字資訊,獲取目標資料和新的url鏈結 2.2.1 功能 維護待爬取集合和已爬取集合 判斷得到的url是否已爬取 將新的url新增到待爬取集合 判斷待爬取集合是否...
python爬蟲甲殼 python爬蟲(一)
一 http協議 1.基本概念 http,hypertext transfer transfer peotocol,超文字傳輸協議 http是乙個基於 請求與響應 模式的 無狀態的應用層協議 http協議採用url作為定位網路資源的標識,url格式如下 port 埠號,預設埠為80 path 請求資...