錦州市廣廈電腦維修|上門維修電腦|上門做系統(tǒng)|0416-3905144熱誠(chéng)服務(wù),錦州廣廈維修電腦,公司IT外包服務(wù)
topFlag1 設(shè)為首頁(yè)
topFlag3 收藏本站
 
maojin003 首 頁(yè) 公司介紹 服務(wù)項(xiàng)目 服務(wù)報(bào)價(jià) 維修流程 IT外包服務(wù) 服務(wù)器維護(hù) 技術(shù)文章 常見故障
錦州市廣廈電腦維修|上門維修電腦|上門做系統(tǒng)|0416-3905144熱誠(chéng)服務(wù)技術(shù)文章
淺談Python網(wǎng)絡(luò)爬蟲

作者: 佚名  日期:2017-05-03 08:32:36   來源: 本站整理

一 相關(guān)背景
網(wǎng)絡(luò)爬蟲(Web Spider)又稱網(wǎng)絡(luò)蜘蛛、網(wǎng)絡(luò)機(jī)器人,是一段用來自動(dòng)化采集網(wǎng)站數(shù)據(jù)的程序。如果把互聯(lián)網(wǎng)比喻成一個(gè)蜘蛛網(wǎng),那么Spider就是在網(wǎng)上爬來爬去的蜘蛛。網(wǎng)絡(luò)爬蟲不僅能夠?yàn)樗阉饕娌杉W(wǎng)絡(luò)信息,而且還可以作為定向信息采集器,定向采集某些網(wǎng)站下的特定信息,如:汽車票價(jià),招聘信息,租房信息,微博評(píng)論等。
二 應(yīng)用場(chǎng)景

圖1 應(yīng)用場(chǎng)景
爬蟲技術(shù)在科學(xué)研究、Web安全、產(chǎn)品研發(fā)、輿情監(jiān)控等領(lǐng)域可以做很多事情。如:在數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)、圖像處理等科學(xué)研究領(lǐng)域,如果沒有數(shù)據(jù),則可以通過爬蟲從網(wǎng)上抓取;在Web安全方面,使用爬蟲可以對(duì)網(wǎng)站是否存在某一漏洞進(jìn)行批量驗(yàn)證、利用;在產(chǎn)品研發(fā)方面,可以采集各個(gè)商城物品價(jià)格,為用戶提供市場(chǎng)最低價(jià);在輿情監(jiān)控方面,可以抓取、分析新浪微博的數(shù)據(jù),從而識(shí)別出某用戶是否為水軍。
三 本文目的
本文簡(jiǎn)要介紹對(duì)于定向信息采集所需了解基本知識(shí)和相關(guān)技術(shù),以及python中與此相關(guān)的庫(kù)。同時(shí)提供對(duì)與數(shù)據(jù)抓取有關(guān)庫(kù)的封裝實(shí)現(xiàn),目的是減少不必要的配置,便于使用,目前僅包含對(duì)urllib2, requests, mechanize的封裝。地址:https://github.com/xinhaojing/Crawler
四 運(yùn)行流程
對(duì)于定向信息的爬取,爬蟲主要包括數(shù)據(jù)抓取、數(shù)據(jù)解析、數(shù)據(jù)入庫(kù)等操作流程。其中:
(1)數(shù)據(jù)抓取:發(fā)送構(gòu)造的HTTP請(qǐng)求,獲得包含所需數(shù)據(jù)的HTTP響應(yīng);
(2)數(shù)據(jù)解析:對(duì)HTTP響應(yīng)的原始數(shù)據(jù)進(jìn)行分析、清洗以提取出需要的數(shù)據(jù);
(3)數(shù)據(jù)入庫(kù):將數(shù)據(jù)進(jìn)一步保存到數(shù)據(jù)庫(kù)(或文本文件),構(gòu)建知識(shí)庫(kù)。

圖2.1 基本運(yùn)行流程
 

圖2.2 詳細(xì)運(yùn)行流程
五 相關(guān)技術(shù)
爬蟲的相關(guān)技術(shù)包括:
(1)數(shù)據(jù)抓取:了解HTTP請(qǐng)求和響應(yīng)中各字段的含義;了解相關(guān)的網(wǎng)絡(luò)分析工具,主要用于分析網(wǎng)絡(luò)流量,如:burpsuit等。一般情況,使用瀏覽器的開發(fā)者模式即可;
(2)數(shù)據(jù)解析:了解HTML結(jié)構(gòu)、JSON和XML數(shù)據(jù)格式,CSS選擇器、Xpath路徑表達(dá)式、正則表達(dá)式等,目的是從響應(yīng)中提取出所需的數(shù)據(jù);
(3)數(shù)據(jù)入庫(kù):MySQL,SQLite、Redis等數(shù)據(jù)庫(kù),便于數(shù)據(jù)的存儲(chǔ);
 

圖3 相關(guān)技術(shù)
 
以上是學(xué)習(xí)爬蟲的基本要求,在實(shí)際的應(yīng)用中,也應(yīng)考慮如何使用多線程提高效率、如何做任務(wù)調(diào)度、如何應(yīng)對(duì)反爬蟲,如何實(shí)現(xiàn)分布式爬蟲等等。本文介紹的比較有限,僅供參考。
六 python相關(guān)庫(kù)
在爬蟲實(shí)現(xiàn)上,除了scrapy框架之外,python有許多與此相關(guān)的庫(kù)可供使用。其中,在數(shù)據(jù)抓取方面包括: urllib2(urllib3)、requests、mechanize、selenium、splinter;在數(shù)據(jù)解析方包括:lxml、beautifulsoup4、re、pyquery。
對(duì)于數(shù)據(jù)抓取,涉及的過程主要是模擬瀏覽器向服務(wù)器發(fā)送構(gòu)造好的http請(qǐng)求,常見類型有:get/post。其中,urllib2(urllib3)、requests、mechanize用來獲取URL對(duì)應(yīng)的原始響應(yīng)內(nèi)容;而selenium、splinter通過加載瀏覽器驅(qū)動(dòng),獲取瀏覽器渲染之后的響應(yīng)內(nèi)容,模擬程度更高。
具體選擇哪種類庫(kù),應(yīng)根據(jù)實(shí)際需求決定,如考慮效率、對(duì)方的反爬蟲手段等。通常,能使用urllib2(urllib3)、requests、mechanize等解決的盡量不用selenium、splinter,因?yàn)楹笳咭蛐枰虞d瀏覽器而導(dǎo)致效率較低。
對(duì)于數(shù)據(jù)解析,主要是從響應(yīng)頁(yè)面里提取所需的數(shù)據(jù),常用方法有:xpath路徑表達(dá)式、CSS選擇器、正則表達(dá)式等。其中,xpath路徑表達(dá)式、CSS選擇器主要用于提取結(jié)構(gòu)化的數(shù)據(jù),而正則表達(dá)式主要用于提取非結(jié)構(gòu)化的數(shù)據(jù)。相應(yīng)的庫(kù)有l(wèi)xml、beautifulsoup4、re、pyquery。
表1 相關(guān)庫(kù)文檔
  
類庫(kù) 
文檔 
  數(shù) 據(jù) 抓 取 
urllib2 
https://docs.python.org/2/library/urllib2.html 
requests 
http://cn.python-requests.org/zh_CN/latest 
mechanize 
https://mechanize.readthedocs.io/en/latest/ 
splinter 
http://splinter.readthedocs.io/en/latest/ 
selenium 
https://selenium-python.readthedocs.io/ 
  數(shù) 據(jù) 解 析 
lxml 
http://lxml.de/ 
  beautifulsoup4 
https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html http://cuiqingcai.com/1319.html 
re 
http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 
pyquery 
https://pythonhosted.org/pyquery/ 
 
七.相關(guān)介紹
1數(shù)據(jù)抓取
(1)urllib2
urllib2是python自帶的一個(gè)訪問網(wǎng)頁(yè)及本地文件的庫(kù),通常需要與urllib一起使用。因?yàn)閡rllib提供了urlencode方法用來對(duì)發(fā)送的數(shù)據(jù)進(jìn)行編碼,而urllib2沒有對(duì)應(yīng)的方法。
以下是對(duì)urllib2簡(jiǎn)易封裝的說明,主要是將相關(guān)的特性集中在了一個(gè)類函數(shù)里面,避免一些繁瑣的配置工作。



圖4 urllib2封裝說明
(2)requests和mechanize
requests是Python的第三方庫(kù),基于urllib,但比urllib更加方便,接口簡(jiǎn)單。其特點(diǎn)包括,關(guān)于http請(qǐng)求:支持自定義請(qǐng)求頭,支持設(shè)置代理、支持重定向、支持保持會(huì)話[request.Session()]、支持超時(shí)設(shè)置、對(duì)post數(shù)據(jù)自動(dòng)urlencode;關(guān)于http響應(yīng):可直接從響應(yīng)中獲得詳細(xì)的數(shù)據(jù),無需人工配置,包括:狀態(tài)碼、自動(dòng)解碼的響應(yīng)內(nèi)容、響應(yīng)頭中的各個(gè)字段;還內(nèi)置JSON解碼器。
mechanize是對(duì)urllib2部分功能的替換,能夠更好的模擬瀏覽器行為,在web訪問控制方面做得很全面。其特點(diǎn)包括:支持cookie設(shè)置、代理設(shè)置、重定向設(shè)置、簡(jiǎn)單的表單填寫、瀏覽器歷史記錄和重載、referer頭的添加(可選)、自動(dòng)遵守robots.txt、自動(dòng)處理HTTP-EQUIV和刷新等。
對(duì)requests和mechanize簡(jiǎn)易封裝后的接口與urllib2一樣,也是將相關(guān)特性集中在了一個(gè)類函數(shù)里面,這里不在重復(fù)說明,可參考所給代碼。
(4)splinter和selenium
selenium(python)和splinter可以很好的模擬瀏覽器行為,二者通過加載瀏覽器驅(qū)動(dòng)工作。在采集信息方面,降低了分析網(wǎng)絡(luò)請(qǐng)求的麻煩,一般只需要知道數(shù)據(jù)頁(yè)面對(duì)應(yīng)的URL即可。由于要加載瀏覽器,所以效率方面相對(duì)較低。
默認(rèn)情況下,優(yōu)先使用的是Firefox瀏覽器。這里列出chrome和pantomjs(無頭瀏覽器)驅(qū)動(dòng)的下載地址,方便查找。
chrome和pantomjs驅(qū)動(dòng)地址:
chrome : http://chromedriver.storage.googleapis.com/index.html?path=2.9/
pantomjs : http://phantomjs.org/download.html
2 數(shù)據(jù)解析
對(duì)于數(shù)據(jù)解析,可用的庫(kù)有l(wèi)xml、beautifulsoup4、re、pyquery。其中,beautifulsoup4比較常用些。除了這些庫(kù)的使用,可了解一下xpath路徑表達(dá)式、CSS選擇器、正則表達(dá)式的語法,便于從網(wǎng)頁(yè)中提取數(shù)據(jù)。其中,chrome瀏覽器自帶生成Xpath的功能。

圖5 chrome查看元素的xpath
如果能夠基于網(wǎng)絡(luò)分析,抓取到所需數(shù)據(jù)對(duì)應(yīng)的頁(yè)面,接下來,從頁(yè)面中提取數(shù)據(jù)的工作就相對(duì)明確很多。具體的使用方法可參考文檔,這里不在詳細(xì)介紹。
八 反爬蟲
1. 基本的反爬蟲手段,主要是檢測(cè)請(qǐng)求頭中的字段,比如:User-Agent、referer等。針對(duì)這種情況,只要在請(qǐng)求中帶上對(duì)應(yīng)的字段即可。所構(gòu)造http請(qǐng)求的各個(gè)字段最好跟在瀏覽器中發(fā)送的完全一樣,但也不是必須。
2. 基于用戶行為的反爬蟲手段,主要是在后臺(tái)對(duì)訪問的IP(或User-Agent)進(jìn)行統(tǒng)計(jì),當(dāng)超過某一設(shè)定的閾值,給予封鎖。針對(duì)這種情況,可通過使用代理服務(wù)器解決,每隔幾次請(qǐng)求,切換一下所用代理的IP地址(或通過使用User-Agent列表解決,每次從列表里隨機(jī)選擇一個(gè)使用)。這樣的反爬蟲方法可能會(huì)誤傷用戶。
3. 希望抓取的數(shù)據(jù)是如果通過ajax請(qǐng)求得到的,假如通過網(wǎng)絡(luò)分析能夠找到該ajax請(qǐng)求,也能分析出請(qǐng)求所需的具體參數(shù),則直接模擬相應(yīng)的http請(qǐng)求,即可從響應(yīng)中得到對(duì)應(yīng)的數(shù)據(jù)。這種情況,跟普通的請(qǐng)求沒有什么區(qū)別。
4. 基于JavaScript的反爬蟲手段,主要是在響應(yīng)數(shù)據(jù)頁(yè)面之前,先返回一段帶有JavaScript代碼的頁(yè)面,用于驗(yàn)證訪問者有無JavaScript的執(zhí)行環(huán)境,以確定使用的是不是瀏覽器。
通常情況下,這段JS代碼執(zhí)行后,會(huì)發(fā)送一個(gè)帶參數(shù)key的請(qǐng)求,后臺(tái)通過判斷key的值來決定是響應(yīng)真實(shí)的頁(yè)面,還是響應(yīng)偽造或錯(cuò)誤的頁(yè)面。因?yàn)閗ey參數(shù)是動(dòng)態(tài)生成的,每次都不一樣,難以分析出其生成方法,使得無法構(gòu)造對(duì)應(yīng)的http請(qǐng)求。
比如網(wǎng)站http://www.kuaidaili.com/,使用就是這種方式,具體可參見https://www.v2ex.com/t/269337。
在首次訪問網(wǎng)站時(shí),響應(yīng)的JS內(nèi)容會(huì)發(fā)送帶yundun參數(shù)的請(qǐng)求,而yundun參數(shù)每次都不一樣。


圖6動(dòng)態(tài)參數(shù)yundun
目前測(cè)試時(shí),該JavaScript代碼執(zhí)行后,發(fā)送的請(qǐng)求不再帶有yundun參數(shù),而是動(dòng)態(tài)生成一個(gè)cookie,在隨后的請(qǐng)求中帶上該cookie,作用類似于yundun參數(shù)。



圖7 動(dòng)態(tài)cookie
針對(duì)這樣的反爬蟲方法,爬蟲方面需要能夠解析執(zhí)行JavaScript,具體的方法可使用selenium或splinter,通過加載瀏覽器來實(shí)現(xiàn)。



熱門文章
  • 機(jī)械革命S1 PRO-02 開機(jī)不顯示 黑...
  • 聯(lián)想ThinkPad NM-C641上電掉電點(diǎn)不...
  • 三星一體激光打印機(jī)SCX-4521F維修...
  • 通過串口命令查看EMMC擦寫次數(shù)和判...
  • IIS 8 開啟 GZIP壓縮來減少網(wǎng)絡(luò)請(qǐng)求...
  • 索尼kd-49x7500e背光一半暗且閃爍 ...
  • 樓宇對(duì)講門禁讀卡異常維修,讀卡芯...
  • 新款海信電視機(jī)始終停留在開機(jī)界面...
  • 常見打印機(jī)清零步驟
  • 安裝驅(qū)動(dòng)時(shí)提示不包含數(shù)字簽名的解...
  • 共享打印機(jī)需要密碼的解決方法
  • 圖解Windows 7系統(tǒng)快速共享打印機(jī)的...
  • 錦州廣廈電腦上門維修

    報(bào)修電話:13840665804  QQ:174984393 (聯(lián)系人:毛先生)   
    E-Mail:174984393@qq.com
    維修中心地址:錦州廣廈電腦城
    ICP備案/許可證號(hào):遼ICP備2023002984號(hào)-1
    上門服務(wù)區(qū)域: 遼寧錦州市區(qū)
    主要業(yè)務(wù): 修電腦,電腦修理,電腦維護(hù),上門維修電腦,黑屏藍(lán)屏死機(jī)故障排除,無線上網(wǎng)設(shè)置,IT服務(wù)外包,局域網(wǎng)組建,ADSL共享上網(wǎng),路由器設(shè)置,數(shù)據(jù)恢復(fù),密碼破解,光盤刻錄制作等服務(wù)

    技術(shù)支持:微軟等
    主站蜘蛛池模板: 中文字幕无码av激情不卡久久| 免费a级毛片无码a∨免费软件| 人妻无码久久中文字幕专区| 用舌头去添高潮无码视频| 精品日韩亚洲AV无码一区二区三区| 无码色AV一二区在线播放| 国产精品爽爽V在线观看无码| 日韩少妇无码一区二区三区| 无码囯产精品一区二区免费| 亚洲av无码有乱码在线观看| 少妇无码?V无码专区在线观看| 精品无码综合一区| 久久精品中文字幕无码绿巨人 | 亚洲午夜无码久久久久| 国产午夜无码福利在线看网站| 在线看片无码永久免费aⅴ| 中文字幕无码av激情不卡| 亚洲国产成人精品无码区在线观看 | 精品无码久久久久久久久水蜜桃 | 亚洲AV无码国产精品麻豆天美 | 四虎成人精品国产永久免费无码| 丰满日韩放荡少妇无码视频| 久久精品亚洲AV久久久无码| 久久精品无码免费不卡| 无码精品一区二区三区| 日韩乱码人妻无码中文字幕久久| 国产精品无码翘臀在线观看| 亚洲精品无码专区在线播放 | 久久青青草原亚洲av无码| 无码人妻丰满熟妇区BBBBXXXX| 潮喷无码正在播放| 国产精品爽爽V在线观看无码| 久久午夜夜伦鲁鲁片免费无码影视| 日韩精品无码视频一区二区蜜桃| 国产丝袜无码一区二区视频| 久久中文字幕无码一区二区| 永久免费av无码不卡在线观看 | AV大片在线无码永久免费| 亚洲va无码专区国产乱码| 特黄熟妇丰满人妻无码| 国产精品午夜无码av体验区|