Python爬蟲(chóng)第一天:爬蟲(chóng)概述及抓包工具和urllib庫(kù)

內(nèi)容簡(jiǎn)述:? ? ?

?????一:爬蟲(chóng)概述和學(xué)習(xí)路線

? ??二:協(xié)議和請(qǐng)求方法?

? ??三:抓包工具-谷歌瀏覽器抓包介紹? ??

? ??四:urllib庫(kù)介紹和使用

? ? 五:構(gòu)建高級(jí)請(qǐng)求對(duì)象Request的get和post

一:爬蟲(chóng)起源

????大數(shù)據(jù)時(shí)代數(shù)據(jù)來(lái)源:

? ? ? ? ?1.企業(yè)生產(chǎn)的用戶(hù)數(shù)據(jù)(BAT)? 例如:百度指數(shù)|阿里指數(shù)|微指數(shù)等

????????????????http://index.baidu.com/? ? ??http://index.1688.com/?

? ? ? ? ?2.數(shù)據(jù)管理咨詢(xún)公司? ? ? ? ? ? ? 例如:艾瑞咨詢(xún)|埃森哲

????????????????http://www.iresearch.com.cn/? https://www.accenture.com/cn-en

? ? ? ? ?3.政府/機(jī)構(gòu)提供的公開(kāi)數(shù)據(jù)? 例如:統(tǒng)計(jì)局|世界銀行等

????????????????http://www.stats.gov.cn/? ? ? ?https://data.worldbank.org.cn/?

? ? ? ? ?4.第三方數(shù)據(jù)平臺(tái)購(gòu)買(mǎi)數(shù)據(jù)? ? 例如:貴陽(yáng)大數(shù)據(jù)交易平臺(tái)

? ? ? ? ?5.爬蟲(chóng)爬取數(shù)據(jù)

二:爬蟲(chóng)概念及分類(lèi)

? ? ?概念:是抓取網(wǎng)頁(yè)數(shù)據(jù)的程序疯潭。

? ? ?使用場(chǎng)景分類(lèi):通用爬蟲(chóng)和聚焦爬蟲(chóng)概念

? ? ?通用爬蟲(chóng):

??????? 通用網(wǎng)絡(luò)爬蟲(chóng)是捜索引擎抓取系統(tǒng)(Baidu剑勾、Google象浑、Yahoo等)的組成部分驰唬。

????????主要目的是將互聯(lián)網(wǎng)上的網(wǎng)頁(yè)下載到本地谤祖,形成一個(gè)互聯(lián)網(wǎng)內(nèi)容的鏡像備份油宜。

? ? ? ?通用爬蟲(chóng)工作流程:

????????????1-抓取網(wǎng)頁(yè)

????????????????A-向搜索引擎主動(dòng)提供

????????????????B-其它優(yōu)質(zhì)網(wǎng)站設(shè)置外鏈

????????????????C-搜索引擎與DNS服務(wù)商合作昂勉,快速收錄新網(wǎng)站

? ? ? ? ? ? 2-數(shù)據(jù)存儲(chǔ)

? ? ? ? ? ? 3-數(shù)據(jù)處理

? ? ? ? ? ? 4-提供檢索服務(wù)敲街、網(wǎng)站排名

????????缺點(diǎn)

?????????? ????1-數(shù)據(jù)大部分無(wú)用

? ? ? ? ? ?????2-搜索引擎無(wú)法針對(duì)于某個(gè)用戶(hù)提供服務(wù)

????????Robots協(xié)議:協(xié)議會(huì)指明通用爬蟲(chóng)可以爬取網(wǎng)頁(yè)的權(quán)限。

????????Robots.txt 并不是所有爬蟲(chóng)都遵守绞旅,大型的搜索引擎爬蟲(chóng)會(huì)遵守摆尝。

? ? ? ? 聚焦爬蟲(chóng):是"面向特定個(gè)性化需求"的一種網(wǎng)絡(luò)爬蟲(chóng)程序。

三:怎么爬數(shù)據(jù)?

????????1.確定需要爬取的網(wǎng)頁(yè)URL因悲。

????????2.通過(guò)HTTP/HTTP協(xié)議獲取HTML頁(yè)面堕汞。

????????3.提取HTML頁(yè)面里有用的數(shù)據(jù):

? ? ? ? ? ? ? ? a.如果是需要的數(shù)據(jù),就保存起來(lái)晃琳。

? ? ? ? ? ? ? ? ?b.如果是頁(yè)面里的其他URL,那就繼續(xù)執(zhí)行第二步讯检。

?四:學(xué)習(xí)爬蟲(chóng)必備知識(shí)點(diǎn)

????????1.Python的基本語(yǔ)法知識(shí)

????????2.如何抓取HTML頁(yè)面:

? ? ? ? ? ? ? ? ?HTTP請(qǐng)求的處理琐鲁,urllib、requests

? ? ? ? ? ? ? ? ?處理后的請(qǐng)求可以模擬瀏覽器發(fā)送請(qǐng)求人灼,獲取服務(wù)器響應(yīng)文件

????????3.解析服務(wù)器響應(yīng)的內(nèi)容

? ? ? ? ? ? ? ? ? ?re围段、xpath、BeautifulSoup4(bs4)投放、jsonpath奈泪、pyquery等

????????4.如何采集動(dòng)態(tài)HTML、驗(yàn)證碼的處理

? ? ? ? ? ? ? ? ? ? Selenium+ PhantomJS(無(wú)界面瀏覽器):

????????????????????模擬真實(shí)瀏覽器加載js灸芳、ajax等非靜態(tài)頁(yè)面

? ? ? ? ? ? ? ? ? ? Tesseract:機(jī)器學(xué)習(xí)庫(kù)涝桅,機(jī)器圖像識(shí)別系統(tǒng),可以處理簡(jiǎn)單的驗(yàn)證碼烙样。

? ? ? ? ? ? ? ? ? ? ?復(fù)雜的驗(yàn)證碼可以通過(guò)手動(dòng)輸入/專(zhuān)門(mén)的打碼平臺(tái)

????????5.Scrapy框架:(Scrapy|Pyspider)

? ? ? ? ? ? ? ? ? ?個(gè)性化高性能(底層使用-異步網(wǎng)絡(luò)框架twisted)冯遂,下載速度快,

? ? ? ? ? ? ? ? ? ? 提供了數(shù)據(jù)存儲(chǔ)误阻、數(shù)據(jù)下載债蜜、提取規(guī)則等組件。

????????6.分布式策略 scrapy-reids:

? ? ? ? ? ? ? ? ? ? 在Scrapy的基礎(chǔ)上添加了以 Redis 為核心的組件究反。支持分布式的功能寻定。

? ? ? ? ? ? ? ? ? ? ?主要在Redis里做請(qǐng)求指紋去重、請(qǐng)求分配精耐、數(shù)據(jù)臨時(shí)存儲(chǔ)等狼速。

? ? ? ? ?7.爬蟲(chóng)-反爬蟲(chóng)-反反爬蟲(chóng)之間的戰(zhàn)斗

? ? ? ? ? ? ? ? ? ? User-Agent、代理卦停、驗(yàn)證碼向胡、動(dòng)態(tài)數(shù)據(jù)加載、加密數(shù)據(jù)惊完。

?五:HTTP和HTTPS

????????HTTP協(xié)議(HyperText TransferProtocol僵芹,超文本傳輸協(xié)議):

????????????????是一種發(fā)布和接收 HTML頁(yè)面的方法。

????????HTTPS(Hypertext TransferProtocol over Secure Socket Layer)

????????????????是HTTP的安全版小槐,在HTTP下加入SSL層拇派。

????????SSL(Secure Sockets Layer 安全套接層)主要用于Web的安全傳輸協(xié)議,在傳輸層對(duì)網(wǎng)絡(luò)連接進(jìn)行加密凿跳,保障在Internet上數(shù)據(jù)傳輸?shù)陌踩?/p>

????????HTTP的端口號(hào)為80件豌,HTTPS的端口號(hào)為443

HTTP工作原理

????網(wǎng)絡(luò)爬蟲(chóng)抓取過(guò)程可以理解為模擬瀏覽器操作的過(guò)程。

????瀏覽器的主要功能是向服務(wù)器發(fā)出請(qǐng)求控嗜,在瀏覽器窗口中展示你選擇的網(wǎng)絡(luò)資源茧彤,HTTP是一套計(jì)算機(jī)通過(guò)網(wǎng)絡(luò)進(jìn)行通信的規(guī)則。

HTTP通信由兩部分組成:?客戶(hù)端請(qǐng)求消息?與?服務(wù)器響應(yīng)消息

瀏覽器發(fā)送HTTP請(qǐng)求的過(guò)程

????????1-當(dāng)用戶(hù)在瀏覽器的地址欄中輸入一個(gè)URL并按回車(chē)鍵之后疆栏,瀏覽器會(huì)向HTTP服務(wù)器發(fā)送HTTP請(qǐng)求曾掂。HTTP請(qǐng)求主要分為“Get”和“Post”兩種方法惫谤。

????????2-當(dāng)我們?cè)跒g覽器輸入U(xiǎn)RL?http://www.hao123.com的時(shí)候,瀏覽器發(fā)送一個(gè)Request請(qǐng)求去獲取hao123的html遭殉,服務(wù)器把Response文件對(duì)象發(fā)送回給瀏覽器石挂。

????????3-瀏覽器分析Response中的 HTML博助,發(fā)現(xiàn)其中引用了很多其他文件险污,比如Images文件,CSS文件富岳,JS文件蛔糯。瀏覽器會(huì)自動(dòng)再次發(fā)送Request去獲取css|js

????????4-當(dāng)所有的文件都下載成功后,網(wǎng)頁(yè)會(huì)根據(jù)HTML語(yǔ)法結(jié)構(gòu)窖式,完整進(jìn)行顯示蚁飒。

六-URL

????????Uniform/Universal Resource Locator的縮寫(xiě)):統(tǒng)一資源定位符。

????????是用于完整地描述互聯(lián)網(wǎng)上網(wǎng)頁(yè)和其他資源的地址的一種手段萝喘。

????????基本格式:scheme://host[:port#]/path/…/[?query-string][#anchor]

????????????????Scheme:協(xié)議(例如:http,https, ftp)

????????????????Host:服務(wù)器的IP地址或者域名

????????????????port#:服務(wù)器的端口(如果是走協(xié)議默認(rèn)端口淮逻,缺省端口80)

????????????????path:訪問(wèn)資源的路徑

????????????????query-string:參數(shù),發(fā)送給http服務(wù)器的數(shù)據(jù)

? ? ? ? ? ? ? ? anchor:錨(跳轉(zhuǎn)到網(wǎng)頁(yè)的指定錨點(diǎn)位置)

?七:請(qǐng)求方法? ? ??

八:發(fā)送請(qǐng)求谷歌調(diào)試細(xì)節(jié)

????? General:

????????????????????Request URL: https://www.baidu.com/? 請(qǐng)求地址

????????????????????Request Method: GET? ? ? ? ? ? ? ? ? ? ? ? ? ? 請(qǐng)求方法

????????????????????Status Code: 200 OK? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 狀態(tài)碼

? ? ? ? ? ? ?????????Remote Address: 61.135.169.125:443?? 客戶(hù)端請(qǐng)求ip

? ?????Response Headers

????????????????????Cache-Control: private? 告訴客戶(hù)端下次請(qǐng)求的方式

????????????????????Connection: Keep-Alive? 客戶(hù)端和服務(wù)端的連接類(lèi)型

????????????????????Content-Encoding: gzip? 服務(wù)端返回的數(shù)據(jù)是經(jīng)過(guò)gzip編碼的

????????????????????Content-Type:text/html;charset=utf-8? 響應(yīng)文件的類(lèi)型和字符編碼

????????????????????Date: Wed, 27 Jun 2018 01:48:50GMT? 服務(wù)器發(fā)送文件的時(shí)間

????????????????????Server: BWS/1.1 服務(wù)器版本

????????????????????Set-Cookie: BDSVRTM=68; path=/? 設(shè)置cookie信息

? ??????RequestHeaders

????????????????????Accept:text/html?? 可以接受返回的類(lèi)型

????????????????????Accept-Encoding: gzip,

????????????????????deflate, br 可以接受的字符編碼

????????????????????Accept-Language:zh-CN,zh;q=0.9??? 語(yǔ)言

????????????????????Cache-Control:max-age=0? 不會(huì)緩存服務(wù)器資源

????????????????????Connection: keep-alive? 和服務(wù)端連接類(lèi)型

? ? ? ? ? ? ? ? ? ?Cookie: BAIDUID=F68132AFC5355:FG=1; Cookie類(lèi)型

????????????????????Host: www.baidu.com?? 請(qǐng)求地址

? ? ? ? ? ? ? ? ? ? User-Agent:Mozilla/5.0 (Windows NT6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181Safari/537.36? 瀏覽器名稱(chēng)

九: urllib庫(kù)

? ? ?urllib庫(kù)是Python提供的用于操作URL的模塊

?? ??urllib.request可以用來(lái)發(fā)送request和獲取request的結(jié)果

?? ??urllib.parse用來(lái)解析和處理URL

?? 【1】urllib.request.urlopen方法

????? urlopen(url, data = None,context = None)

??????? 如果有data,則代表是post請(qǐng)求阁簸,context表示的是https請(qǐng)求的消除ssl錯(cuò)誤

??????? urllib.request.urlretrieve(url, file_path) 將url內(nèi)容直接下載到file_path中

????????注意:windows和mac在通過(guò)urlopen發(fā)送https請(qǐng)求的時(shí)候有可能報(bào)錯(cuò)

? ? ? ? 錯(cuò)誤:SSL: CERTIFICATE_VERIFY_FAILED

? ? ? ? 原因:Python 2.7.9 之后引入了一個(gè)新特性爬早,當(dāng)使用urllib.urlopen打開(kāi)一個(gè) https 鏈接時(shí),會(huì)驗(yàn)證一次 SSL證書(shū)启妹。

? ? ? ? 解決方案:

? ? ? ? ? ? ? ? 1-使用ssl創(chuàng)建未經(jīng)驗(yàn)證的上下文筛严,在urlopen中傳入上下文參數(shù)

? ??????????????????????context = ssl._create_unverified_context()

? ? ? ? ? ? ? ? ????????urllib.request.urlopen("url",context=context).read()

? ? ? ? ? ? ? ? 2-全局取消證書(shū)驗(yàn)證

? ? ? ? ? ? ? ? ? ? 在文件中導(dǎo)入ssl并添加一行代碼

? ????????????????????import ssl

? ? ? ? ? ? ? ? ? ? ? ssl._create_default_https_context = ssl._create_unverified_context

?? 【2】HTTPResponse對(duì)象常見(jiàn)方法

??????? ????read()??讀取的是二進(jìn)制數(shù)據(jù)

????????? ????????字符串類(lèi)型和字節(jié)類(lèi)型

??????? ????? ????????字符串==》字節(jié)? 編碼encode()

??????? ? ??? ????????字節(jié)==》字符串? 解碼decode()

????????????readline() 讀取一行

????????????readlines()讀取全部,返回一個(gè)列表

????? 【注意】上面的讀取都是字節(jié)類(lèi)型饶米,轉(zhuǎn)為字符串類(lèi)型需要解碼

????? ?? ????getcode()狀態(tài)碼

????? ?? ????geturl()??獲取url

????? ?? ????getheaders()響應(yīng)頭信息 列表里面有元祖

? ? ? ? ?????status屬性??http狀態(tài)碼

?? 【3】urllib.parse

????? ?????A-urllib.parse.urlencode

??????? ????????通過(guò)post提交的數(shù)據(jù)桨啃,需通過(guò)此函數(shù)轉(zhuǎn)碼,且發(fā)送請(qǐng)求的時(shí)候必須為字節(jié)格式的檬输,

????????????????所以post請(qǐng)求數(shù)據(jù)經(jīng)常如下使用

? ? ? ? ? ? ? ? ?data :是一個(gè)字典

? ? ? ? ? ? ? ? ? data =urllib.parse.urlencode(data).encode('utf-8')

?? ??????B-urllib.parse.quote()

?????????? ????????get參數(shù)中照瘾,有中文的,需要使用這個(gè)函數(shù)轉(zhuǎn)碼

?????????? ????????http://www.baidu.com?name=中國(guó)

? ? ? ? ? ?????????http://tool.chinaz.com/tools/urlencode.aspx? ? ?編碼在線工具

?? ??????C-urllib.parse.unquote()?? url解碼

十一:構(gòu)造請(qǐng)求對(duì)象Request(高級(jí)請(qǐng)求)

? ? ? ?User-Agent在線解析工具??http://www.atool.org/useragent.php

? ? ? ?request = urllib.request.Request(fullurl,headers=None)

? ? ? ?可以直接傳遞headers丧慈,也可request.add_header('User-Agent','xxx')

十二:帶中文的get請(qǐng)求

十三:POST請(qǐng)求(百度翻譯)

? 溫馨提示:

?? ? ????a.如果只加User-Agent獲取不到想要的結(jié)果析命,將所有請(qǐng)求頭復(fù)制再次請(qǐng)求

? ? ?????b.不要帶-請(qǐng)求頭里面'Accept-Encoding': 'gzip, deflate'

十四:作業(yè)

? ??????1-完成課堂代碼

? ? ? ? 2-完成必應(yīng)翻譯get和post請(qǐng)求

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市伊滋,隨后出現(xiàn)的幾起案子碳却,更是在濱河造成了極大的恐慌,老刑警劉巖笑旺,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昼浦,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡筒主,警方通過(guò)查閱死者的電腦和手機(jī)关噪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)鸟蟹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人使兔,你說(shuō)我怎么就攤上這事建钥。” “怎么了虐沥?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵熊经,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我欲险,道長(zhǎng)镐依,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任天试,我火速辦了婚禮槐壳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘喜每。我一直安慰自己务唐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布带兜。 她就那樣靜靜地躺著枫笛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鞋真。 梳的紋絲不亂的頭發(fā)上崇堰,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音涩咖,去河邊找鬼海诲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛檩互,可吹牛的內(nèi)容都是我干的特幔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼闸昨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蚯斯!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起饵较,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拍嵌,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后循诉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體横辆,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年茄猫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了狈蚤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片困肩。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖脆侮,靈堂內(nèi)的尸體忽然破棺而出锌畸,到底是詐尸還是另有隱情,我是刑警寧澤靖避,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布潭枣,位于F島的核電站,受9級(jí)特大地震影響筋蓖,放射性物質(zhì)發(fā)生泄漏卸耘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一粘咖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧侈百,春花似錦瓮下、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至例证,卻和暖如春路呜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背织咧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工胀葱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人笙蒙。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓抵屿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親捅位。 傳聞我的和親對(duì)象是個(gè)殘疾皇子轧葛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容