從零起步系統入門Python爬蟲工程師(一)-慕課實戰 環境搭建 爬蟲作用 學習爬蟲需要知識 解決問題 基礎知識

環境搭建

  1. ide: pycharm
  2. 數據庫:mysql
  3. 數據庫可視化ide:navicat
  4. 虛擬環境(可以支持不同python版本):virtualenvwrapper
mkdir virtualenvs
pip3.6 install virtualenvwrapper
vim ~/.bash_profile
#.bash_profile
export WORKON_HOME='/Users/tangminglong/virtualenvs'
 export VIRTUALENVWRAPPER_PYTHON='/usr/local/bin/python3.7'
 
source /usr/local/bin/virtualenvwrapper.sh
創建虛擬環境
mkvirtualenv (-p python路徑) test 可以指定python版本
列出所有虛擬環境
workon 
#進入虛擬環境
 workon test
#退出
deactivate
目前虛擬環境存放的目錄是~/virtualenvs
#刪除虛擬環境
刪除目錄及可以了
#安裝依賴 
在對應的虛擬環境下 pip install requests

爬蟲作用

  1. 採集網站數據
  2. 自動化測試
  3. 灰色產業

學習爬蟲需要知識

  1. 計算機網絡(http/https tcp/ip socket)
  2. 前端知識
  3. 正則表達式
  4. 數據存儲(分佈式存儲)
  5. 併發處理(多進程、多線程、線程池、協程)
  6. 圖像識別(處理反爬、驗證碼) 機器學習算法(驗證碼、數據解析)

解決問題

  1. 爬蟲的採集和更新策略
  2. 數據解析
  3. 數據存儲
  4. 模擬登錄(驗證碼識別)
  5. 爬蟲的監控和部署
  6. 解決反爬
  7. 數據去重(url去重 內容去重)

基礎知識

  1. 網絡
    • 七層協議:應用層、表示層、會話層、傳輸層、網絡層、 數據鏈路層、物理層
    • 五層協議:應用層(http https ftp dns pop3)、傳輸層、網絡層(tcp ip IGMP)、數據鏈路層 (ARP RARP 交換機)、物理層(雙絞線、集線器)
  • socket聊天
  • socket多人聊天
  • socket模擬http
  • http協議(換行 傳輸的數據)
  1. 前端
requests庫(github)
encoding 編碼(自動識別)
json 轉爲json
  1. 正則表達式
# .匹配任意字符
# ^ 以某個字符開始
# $ 以某個字符結束
# * 某個字符零到多次(匹配最長)
# + 一到多次
# ? 0到1次
# {m,n} m到n次
# [] 括號裏面只要出現一個都可以(中括號裏面的短橫線-,表示區間 ) [a-z]
# \s 空格換行 \S
# \d 匹配一個數字 \D
# \w 字母數字下劃線 \W
# \b 單詞開始或者結束位置的空字符串 \B
# | 或
# \\ 轉移字符
.*匹配最長 貪婪匹配
.*?取消貪婪匹配
分組 :()
eg info="姓名:tmlong 生日:1987年10月11日 本科2016年9月1日"
result = re.match('.*生日.*?(\d{4})',info)     1987
match從字符串開始找 search不是
ps:match 匹配一行 如果換行就匹配不到 re.DOTALL
  1. 元素篩選
  • BeautifulSoup
from bs4 import BeautifulSoup
html =‘<html>aads</html>’
bs = BeautifulSoup(html,’html.parser’)
bs.find(‘div’)
div_tag = bs.find(‘div’,id="info”) 選擇所有id爲info的div
children = div_tag.contents 提取所有子元素 descendant遍歷
next_siblings(是否加s)兄弟節點 previous_siblings
div_tag.get(“class”) 獲取屬性
  • Scrapy Selector Xpath
//div[@lang] 所有擁有屬性爲lang的div
//div[@lang=‘eng] 所有擁有屬性lang等於eng的div
/div/div[last()] div 下面的div數組的最後一個
/div/* 選取div下的所有子節點
//div/div[contains(@class,'hello’)]
import scrapy from Selector
sel = Selector(text=html)
girl_friend_name_class=“/html/body/div[1]/p/@class”
sel.xpath(girl_friend_name_class).extract()
more_than_class1 = "//div/div[contains(@class,'hello')]”
ps
瀏覽器源碼選擇元素 右鍵 可以提取表達式
contains  內置了很多方法
  • Css選擇器
div > p 獲取div下的第一個p元素
div p 獲取div下所有p元素
#name 獲取id爲name
.name  獲取class爲name
ul + p 獲取ul下第一個p元素
ul ~ p ul所有相鄰的p元素
a[hrep=‘https://baidu.com'] 獲取href等於‘https://baidu.com的a元素
href$ href^ href*
import scrapy from Selector
 sel = Selector(text=html)
name_tag = sel.css(".name1 > p::text").extract()[0]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章