python3網路爬蟲開發實戰(配置踩坑及學習備忘)
文章目錄
一、開發環境配置
1.1,python安裝
Windows(設定環境變數)
Linux
Mac
1.2 請求庫的安裝
requests
Selenium
selenium==2.48.0下這個老版本,新版不支援phantomjs
ChromeDriver
淘寶映象站:http://npm.taobao.org/mirrors/chromedriver
GeckoDriver
PhantomJS(版本2.1.1)
安裝依賴:
sudo apt-get install build-essential chrpath libssl-dev libxft-dev
sudo apt-get install libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev
下載地址(淘寶映象):https://npmmirror.com/mirrors/phantomjs?spm=a2c6h.24755359.0.0.6d443dc1T0AXPt
安裝方式一:放到系統目錄(推薦)
原名太長,重新命名,移動到/usr/local/share
目錄下
sudo mv phantomjs211 /usr/local/share/
建立啟動軟連結:
sudo ln -s /usr/local/share/phantomjs211/bin/phantomjs /usr/local/bin/
安裝方式二:放到使用者目錄
下載包解壓後解壓,資料夾移到home目錄下,
並設為隱藏檔案(資料夾名稱前加.號),
修改~/.profile檔案:
sudo vim ~/.profile
末尾新增phantomjs執行檔案路徑,如:
export PATH="$HOME/.phantomjs版本號/bin:$PATH"
錯誤解決
Auto configuration failed
140277513316288:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:185:filename(libssl_conf.so): libssl_conf.so: 無法開啟共享物件檔案: 沒有那個檔案或目錄
140277513316288:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
140277513316288:error:0E07506E:configuration file routines:MODULE_LOAD_DSO:error loading dso:conf_mod.c:285:module=ssl_conf, path=ssl_conf
140277513316288:error:0E076071:configuration file routines:MODULE_RUN:unknown module name:conf_mod.c:222:module=ssl_conf
解決方法:
export OPENSSL_CONF=/etc/ssl/
aiohttp
1.3解析庫的安裝
lxml
Beautiful Soup
pyquery
tesserocr(先安裝tesseract)
(在windows下因為相容問題,所以用pytesseract替代tesseroct,然後設定tesseract的環境變數。)
tesseract語言下載包:https://codechina.csdn.net/mirrors/tesseract-ocr/tessdata?utm_source=csdn_github_accelerator
測試安裝是否成功:
tesseract image.png result -l eng |type result.txt
tesseract image.png result -l eng |cat result.txt
import pytesseract
from PIL import Image
im=Image.open('image.png')
print(pytesseract.image_to_string(im))
import pytesseract
from PIL import Image
image = Image.open("./NormalImg.png")
text = pytesseract.image_to_string(image)
print(text)
1.4 資料庫的安裝
windows下修改儲存位置、日誌位置,設定環境變數。
MySQL安裝
(win10:計算機–管理–服務,開啟和關閉MySQL服務。)
net stop mysql
MongoDB安裝及使用
安裝gnupg軟體包
sudo apt-get install gnupg
匯入包管理系統使用的公鑰:
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
新增MongoDB儲存庫:(ubuntu20.04)
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
更新儲存庫:
sudo apt-get update
安裝mongodb:
sudo apt install mongodb-org
啟動mongodb,設定開機自啟動
sudo systemctl start mongod.service
sudo systemctl enable mongod
檢查MongoDB服務的狀態:
sudo systemctl status mongod
關閉MongoDB服務:
sudo systemctl stop mongod
重新啟動MongoDB服務:
sudo systemctl restart mongod
關閉開機啟動:
sudo systemctl disable mongod
進入MongoDB shell:
mongo
啟動錯誤
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2020-04-20 13:32:29 IST; 6min ago
Docs: https://docs.mongodb.org/manual
Process: 27917 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=14)
Main PID: 27917 (code=exited, status=14)
Apr 20 13:32:29 manojkumar systemd[1]: Started MongoDB Database Server.
Apr 20 13:32:29 manojkumar systemd[1]: mongod.service: Main process exited, code=exited, status=14/n/a
Apr 20 13:32:29 manojkumar systemd[1]: mongod.service: Failed with result ‘exit-code’.
解決辦法:
sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo chown mongodb:mongodb /tmp/mongodb-27017.sock
sudo service mongod restart
windows下:
配置檔案,bin目錄下有一個mongod.cfg的檔案,即為MongoDB的配置檔案。可利用記事本等工具開啟進行一些配置。 例如修改資料檔案儲存位置連線埠號等。
storage塊下dbpath為資料檔案存放目錄 ,
systemlog塊下path為日誌檔案儲存位置。
如果指定目錄或日誌不存在啟動失敗,可手動建立
如果進行修改想要時修改生效的話,需關閉服務並重新啟動。
Redis
windows免費版Redis-x64-3.2.100.msi
1.5 儲存庫的安裝
PyMySQL
PyMongo
redis-py
RedisDump
1.6 web庫的安裝
Flask
Tornado
1.7 App爬取相關庫的安裝
Charles
mitmproxy
7.*版本有依賴問題,換低版本(如5.0.0)
Appium
1.8 爬蟲框架的安裝
pyspider
執行命令pyspider all
之前,先輸入:
export OPENSSL_CONF=/etc/ssl/
依賴解決
先安裝phantomjs
其他軟體要求版本
Wsgidav==2.3.0
Werkzeug==0.16.1
Flask==1.1.1(不行就試試0.1.0)
其他相關依賴一般互相有提示
語法錯誤解決
由於async和await從 python3.7 開始已經加入保留關鍵字中,所以修改/home/san/.local/lib/python3.9/site-packages/pyspider/下的python檔案的async
為shark
(全部替換),在替換是要注意:只替換名為async 的變數
或引數名
,不要圖省事選擇“全部替換”,導致引用的類名被修改,如下圖。
注意:例如檔案tornado_fetcher.py中如果全部替換是17處,便會報錯 from tornado.curl_httpclient import CurlAsyncHTTPClient
from tornado.simple_httpclient import SimpleAsyncHTTPClient
如果已經全部替換完,請回去手動將其中幾處引用類
名改回來。
要替換的檔案如下:
1.run.py
2.fetcher\tornado_fetcher.py
3.webui\app.py
Error: Could not create web server listening on port 25555
檢視25555埠占用:
lsof -i:25555
找到佔用程式PID,kill掉
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
phantomjs 8982 san 7u IPv4 194586 0t0 TCP *:25555 (LISTEN)
kill 8982
重新執行
pyspider all
Scrapy
Scarpy-Splash
splash需要通過Docker安裝
Scrapy-Redis
1.9 部署相關庫的安裝
Docker
Scrapyd
Scrapyd-Client
Scrapyd API
Scrapyrt
Gerapy
二、爬蟲基礎
HTTP基本原理
URI和URL
URI統一資源標誌符
URL統一資源定位符
URL是URI的子集
超文字
HTTP和HTTPS
HTTP超文字傳輸協議,Hyper Text Transfer Protocol
HTTPS是HTTP的安全版,即HTTP下加入SSL層,Hyper Text Transfer Protocol over Secure Socket Layer
HTTP請求過程及響應
網頁基礎
網頁的組成
HTML
CSS
JavaScript
網頁的結構
節點樹及節點間的關係
選擇器
爬蟲的基本原理
爬蟲概述
1,獲取網頁(原始碼)
獲取庫urllib、requests
2,提取資訊
提取庫Beautiful Soup、pyquery、lxml
3,儲存資料
本地:TXT、JSON或MySQL、MongoDB
遠端伺服器:藉助SFTP操作
4,自動化程式
能抓怎樣的資料
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/a485d2592e924920a975dea04068b479.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAc2FuZG9ueg==,size_20,color_FFFFFF,t_70,g_se,x_16
JavaScript 渲染頁面
會話和Cookies
靜態網頁和動態網頁
無狀態HTTP
常見誤區
代理的基本原理
基本原理
代理的作用
爬蟲代理
代理分類
常見代理設定
三、基本庫的使用
1,使用urllib
request:它是最基本的 HTTP 請求模組,可以用來模擬傳送請求。只需要給庫方法傳入 URL 以及額外的引數,就可以模擬實現這個過程了 。
error:異常處理模組,如果出現請求錯誤 , 我們可以捕獲這些異常,然後進行重試或其他操
作以保證程式不會意外終止 。
parse : 一個工具模組,提供了許多 URL 處理方法,比如拆分、解析 、 合併等 。
robot parser :主要是用來識別網站的 robots.txt 檔案,然後判斷哪些網站可以爬,哪些網站不
可以爬,它其實用得 比較少 。
傳送請求
urlopen()
API:
urllib.request.urlopen(url, data=None, [ timeout, ]*, cafile=None, capath=None, cadefault=False, context=None )
data引數
timeout引數
context引數
cafile引數
capath引數
Request
class urllib.request.Request ( url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
高階用法
urllib.request 模組裡的 BaseHandler 類,它是所有其他 Handler 的父類,它提
供了最基本的方法,例如 default_open()、 protocol_request ()等 。
各種Handler子類
HTTPDefaultErrorHandler :用於處理 HTTP 響應錯誤,錯誤都會丟擲 HTTP Error 型別的異常 。
HTTPRedirectHandler :用於處理重定向 。
HTTPCookieProcessor : 用於處理 Cookies 。
ProxyHandler :用於設定代理 , 預設代理為空 。
HTTPPasswordMgr :用於管理密碼,它維護了使用者名稱和密碼的表 。
HTTPBasicAuthHandler : 用於管理認證,如果一個連結開啟時需要認證,那麼可以用它來解
決認證問題。
處理異常
解析連結
分析Robots協議
相關文章
- python3網路爬蟲開發實戰_Python3 爬蟲實戰Python爬蟲
- 《Python3 網路爬蟲開發實戰》—學習筆記Python爬蟲筆記
- Python3網路爬蟲開發實戰Python爬蟲
- python3網路爬蟲開發實戰_Python 3開發網路爬蟲(一)Python爬蟲
- 《Python3網路爬蟲開發實戰》教程||爬蟲教程Python爬蟲
- 《python3網路爬蟲開發實戰》--pyspiderPython爬蟲IDE
- python3網路爬蟲開發實戰pdfPython爬蟲
- [Python3網路爬蟲開發實戰] 分散式爬蟲原理Python爬蟲分散式
- 《Python3網路爬蟲開發實戰》開源啦!Python爬蟲
- [Python3網路爬蟲開發實戰] Charles 的使用Python爬蟲
- [Python3網路爬蟲開發實戰] --Splash的使用Python爬蟲
- Python3網路爬蟲開發實戰(第二版)Python爬蟲
- Python3網路爬蟲開發實戰——第1章 開發環境Python爬蟲開發環境
- 面前最全《崔慶才python3網路爬蟲開發實戰》Python爬蟲
- python3 網路爬蟲開發實戰 貓眼top100Python爬蟲
- 《Python3網路爬蟲開發實戰程式碼》基本庫使用Python爬蟲
- 爬蟲實戰開發學習(一)爬蟲
- [Python3網路爬蟲開發實戰] 2-爬蟲基礎 2-網頁基礎Python爬蟲網頁
- 不踩坑的Python爬蟲:Python爬蟲開發與專案實戰,從爬蟲入門 PythonPython爬蟲
- 讀書筆記:《Python3網路爬蟲開發實戰》——第2章:爬蟲基礎筆記Python爬蟲
- 我的爬蟲入門書 —— 《Python3網路爬蟲開發實戰(第二版)》爬蟲Python
- Python 3網路爬蟲開發實戰Python爬蟲
- 《Python3網路爬蟲開發實戰》抽獎贈書活動Python爬蟲
- python3網路爬蟲開發實戰【高清掃描帶目錄】Python爬蟲
- 【閱讀筆記】《Python3網路爬蟲開發實戰》PDF文件筆記Python爬蟲
- 《崔慶才Python3網路爬蟲開發實戰教程》學習筆記(1):Windows下Python多版本共存配置方法Python爬蟲筆記Windows
- Python3網路爬蟲開發實戰——第3章 基本庫的使用Python爬蟲
- 網路爬蟲——爬蟲實戰(一)爬蟲
- 《網路爬蟲開發實戰案例》筆記爬蟲筆記
- [Python3網路爬蟲開發實戰] 2-爬蟲基礎 1-HTTP基本原理Python爬蟲HTTP
- Python3網路爬蟲快速入門實戰解析Python爬蟲
- 【Python3網路爬蟲開發實戰】3.4-抓取貓眼電影排行Python爬蟲
- python3網路爬蟲開發實戰-線上版-可複製貼上Python爬蟲
- 2019最新崔慶才python3網路爬蟲開發專案實戰(完整)Python爬蟲
- 《Python3網路爬蟲開發實戰(第二版)》內容介紹Python爬蟲
- [Python3網路爬蟲開發實戰] 2-爬蟲基礎 5-代理的基本原理Python爬蟲
- [Python3網路爬蟲開發實戰] 7-動態渲染頁面爬取-3-Splash負載均衡配置Python爬蟲負載
- 【Python3網路爬蟲開發實戰】4-解析庫的使用-1 使用XPathPython爬蟲