爬蟲(又被稱爲網頁蜘蛛,網絡機器人)就是模擬客戶端發送網絡請求,接收請求響應,一種按照必定的規則,自動地抓取互聯網信息的程序。css
原則上,只要是瀏覽器(客戶端)能作的事情,爬蟲都可以作。html
根據被爬網站的數量的不一樣,咱們把爬蟲分爲:python
- 通用爬蟲 :一般指搜索引擎的爬蟲
- 聚焦爬蟲 :針對特定網站的爬蟲
Robots協議:網站經過Robots協議告訴搜索引擎哪些頁面能夠抓取,哪些頁面不能抓取,但它僅僅是道德層面上的約束。shell
瀏覽器會主動請求js,css等內容,js會修改頁面的內容,js也能夠從新發送請求,最後瀏覽器渲染出來的內容在elements中,其中包含css,圖片,js,url地址對應的響應等。瀏覽器
可是在爬蟲中,爬蟲只會請求url地址,對應的拿到url地址對應的響應。瀏覽器渲染出來的頁面和爬蟲請求的頁面並不同。因此在爬蟲中,須要以url地址對應的響應爲準來進行數據的提取。緩存
url的形式:scheme://host[:port#]/path/…/[?query-string][#anchor]安全
- scheme:協議(例如:http, https, ftp)
- host:服務器的IP地址或者域名
- port:服務器的端口(若是是走協議默認端口,80 or 443)
- path:訪問資源的路徑
- query-string:參數,發送給http服務器的數據
- anchor:錨(跳轉到網頁的指定錨點位置)
HTTP:超文本傳輸協議,默認端口號:80服務器
HTTPS:HTTP + SSL(安全套接字層),默認端口號:443 (HTTPS比HTTP更安全,可是性能更低)cookie
HTTP常見請求頭網絡
- Host (主機和端口號)
- Connection (連接類型)
- Upgrade-Insecure-Requests (升級爲HTTPS請求)
- User-Agent (瀏覽器名稱)
- Accept (傳輸文件類型)
- Referer (頁面跳轉處)
- Accept-Encoding(文件編解碼格式)
- Cookie (Cookie)
- x-requested-with :XMLHttpRequest (是Ajax 異步請求)
常見的請求方法
- GET
- POST
- 我剛整理了一套2018最新的0基礎入門和進階教程,無私分享,加Python學習q-u-n :二二七,四三五,四五零 便可獲取,內附:開發工具和安裝包,以及系統學習路線圖
有關 GET 請求的其餘一些註釋:
- GET 請求可被緩存
- GET 請求保留在瀏覽器歷史記錄中
- GET 請求可被收藏爲書籤
- GET 請求不該在處理敏感數據時使用
- GET 請求有長度限制
- GET 請求只應當用於取回數據
有關 POST 請求的其餘一些註釋:
- POST 請求不會被緩存
- POST 請求不會保留在瀏覽器歷史記錄中
- POST 不能被收藏爲書籤
- POST 請求對數據長度沒有要求
響應狀態碼(status code)
常見的狀態碼:
- 200:成功
- 302:臨時轉移至新的url
- 307:臨時轉移至新的url
- 404:not found
- 500:服務器內部錯誤
代理IP的分類:
透明代理(Transparent Proxy),透明代理雖然能夠直接「隱藏」你的IP地址,可是仍是能夠從HTTP_X_FORWARDED_FOR來查到你是誰。
匿名代理(Anonymous Proxy),匿名代理比透明代理進步了一點:別人只能知道你用了代理,沒法知道你是誰。
混淆代理(Distorting Proxies),與匿名代理相同,若是使用了混淆代理,別人仍是能知道你在用代理,可是會獲得一個假的IP地址,假裝的更逼真。
高匿代理(Elite proxy或High Anonymity Proxy),高匿代理讓別人根本沒法發現你是在用代理,因此是最好的選擇。
Scrapy是一個爲了爬取網站數據,提取結構性數據而編寫的應用框架,咱們只須要實現少許的代碼,就可以快速的抓取。
Scrapy 使用了Twisted['twɪstɪd]異步網絡框架,能夠加快咱們的下載速度。
- 異步:調用在發出以後,這個調用就直接返回,無論有無結果
- 非阻塞:關注的是程序在等待調用結果(消息,返回值)時的狀態,指在不能馬上獲得結果以前,該調用不會阻塞當前線程。
scrapy的流程
從上圖能夠衍生出下圖,我的以爲更加好理解一些
其流程能夠描述以下:
- 調度器把requests-->引擎-->下載中間件--->下載器
- 下載器發送請求,獲取響應---->下載中間件---->引擎--->爬蟲中間件--->爬蟲
- 爬蟲提取url地址,組裝成request對象---->爬蟲中間件--->引擎--->調度器
- 爬蟲提取數據--->引擎--->管道
- 管道進行數據的處理和保存
scrapy中每一個模塊的具體做用:
scrapy項目實現流程:
- 建立一個scrapy項目:scrapy startproject +<項目名字>
- 生成一個爬蟲:scrapy genspider +<爬蟲名字> + <容許爬取的域名>
- 提取數據:完善spider,使用xpath等方法
- 保存數據:pipeline中保存數據
scrapy.cfg :項目的配置文件
mySpider/ :項目的Python模塊,將會從這裏引用代碼
mySpider/items.py :項目的目標文件
mySpider/pipelines.py :項目的管道文件
mySpider/settings.py :項目的設置文件
mySpider/spiders/ :存儲爬蟲代碼目錄
認識scrapy的debug信息
每次程序啓動後,默認狀況下,終端都會出現不少的debug信息,那麼下面咱們來簡單認識下這些信息
scrapy shell的使用
- response.url:當前響應的url地址
- response.request.url:當前響應對應的請求的url地址
- response.headers:響應頭
- response.body:響應體,也就是html代碼,默認是byte類型
- response.requests.headers:當前響應的請求頭
settings.py中的重點字段和內涵
- USER_AGENT 設置ua
- ROBOTSTXT_OBEY 是否遵照robots協議,默認是遵照
- CONCURRENT_REQUESTS 設置併發請求的數量,默認是16個
- DOWNLOAD_DELAY 下載延遲,默認無延遲
- COOKIES_ENABLED 是否開啓cookie,即每次請求帶上前一次的cookie,默認是開啓的
- DEFAULT_REQUEST_HEADERS 設置默認請求頭
- SPIDER_MIDDLEWARES 爬蟲中間件,設置過程和管道相同
- DOWNLOADER_MIDDLEWARES 下載中間件