內(nèi)容簡述:
? ? ?一:打碼平臺
? ? 二:多線程爬蟲
? ? 三:Scrapy框架
一:打碼平臺使用
? ? ? ? 云打碼?http://www.yundama.com/? ? ?打碼兔等?
二:多線程爬蟲
三:Scrapy框架
? ??定義:Scrapy是基于Python實(shí)現(xiàn),方便爬取網(wǎng)站數(shù)據(jù)坤次、提取結(jié)構(gòu)性數(shù)據(jù)的應(yīng)用框架。
? ??底層:使用Twisted異步網(wǎng)絡(luò)框架來處理網(wǎng)絡(luò)通訊,加快下載速度劲妙。
????????????不用手動實(shí)現(xiàn)異步框架掖桦,包含了多種中間件接口,非常靈活夺颤。
? ??Scrapy運(yùn)行架構(gòu)流程圖:? ??
?? ??組件說明:
? ? ? ? ? ?Scrapy Engine(引擎): 負(fù)責(zé)Spider痢缎、ItemPipeline、Downloader世澜、Scheduler中間的通訊独旷,信號、數(shù)據(jù)傳遞等寥裂。
? ? ? ? ? ?Scheduler(調(diào)度器): 負(fù)責(zé)接收引擎發(fā)送過來的Request請求嵌洼,并按照一定的方式進(jìn)行整理排列,入隊封恰,當(dāng)引擎需要時麻养,交還給引擎。
????????????Downloader(下載器):負(fù)責(zé)下載引擎發(fā)送的所有Requests請求诺舔,并將其獲取到的Responses交還給引擎鳖昌,由引擎交給Spider來處理。
????????????Spider(爬蟲):負(fù)責(zé)處理所有Responses,分析提取數(shù)據(jù)低飒,獲取Item字段需要的數(shù)據(jù)许昨,并將需要跟進(jìn)的URL提交給引擎,再次進(jìn)入調(diào)度器
????????????Item Pipeline(管道):負(fù)責(zé)處理Spider中獲取到的Item褥赊,并進(jìn)行后期處理(如詳細(xì)分析糕档、過濾、存儲等).
????????????Downloader Middlewares(下載中間件):類似一個可以自定義擴(kuò)展下載功能的組件拌喉。
Spider Middlewares(Spider中間件):類似一個可以自定擴(kuò)展和操作引擎和Spider中間通信的功能組件(比如進(jìn)入Spider的Responses以及從Spider出去的Requests)
?簡單使用:(安裝)pip3 install scrapy
???? (1)創(chuàng)建項(xiàng)目scrapy startproject spider1(項(xiàng)目名稱)
????? (2)目錄結(jié)構(gòu)
??????? spider1
?????????? spider1
????????????? spiders? ? ? ? 爬蟲目錄(寫代碼位置)
???????????????? __init__.py
? ? ? ? ? ? ? ? ?hello.py?????? 爬蟲文件
????????????? __init__.py
????????????? items.py? ? ? ? ? ? ? ?定義數(shù)據(jù)結(jié)構(gòu)地方
????????????? middlewares.py??? 中間件
????????????? pipelines.py? ? ? ? ? 管道文件
????????????? settings.py? ? ? ? ? ? 項(xiàng)目配置文件
?????????? scrapy.cfg
??????? 通過指令創(chuàng)建爬蟲文件
?????????? cd spider1/spider1
?????????? scrapy genspider qiubai"www.qiushibaike.com"
?????????? 此時在spider1/spider1/spiders里面自動創(chuàng)建一個qiubai.py
? ? ? ? ?name:爬蟲的名字速那,啟動的時候根據(jù)爬蟲的名字啟動項(xiàng)目
??????? allowed_domains:允許的域名。意思是爬取的時候這個請求要不要發(fā)送司光,如果是該允許域名下的url琅坡,就會發(fā)送,否則過濾掉這個請求残家∮馨常【列表允許多個域名】
??????? start_urls:爬蟲起始url,是一個列表,里面可以寫多個茴晋,一般只寫一個
??????? def parse(self, response):寫代碼的入口陪捷,parse函數(shù)名是固定。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?當(dāng)收到下載數(shù)據(jù)時系統(tǒng)會自動調(diào)用
? ? ? ? ?參數(shù)response诺擅,是一個響應(yīng)對象市袖,可從中獲取html字符串,然后解析之烁涌。
? ? ? ?【溫馨提示】這個parse函數(shù)必須返回一個可迭代對象
????? (3)定制items.py苍碟,個性化定義數(shù)據(jù)結(jié)構(gòu)格式。
????? (4)運(yùn)行-打印response對象測試下?????
????????????????來到終端下:
?????????? ????????????cd spider1/ spider1/spiders
? ? ? ? ? ? ? ? ? ? ? ?scrapy crawl qiubai
??????? ????????根據(jù)response獲取網(wǎng)頁內(nèi)容
?????????? ????????????????response.text? 字符串類型??response.body二進(jìn)制類型
????? (5)運(yùn)行撮执,直接通過命令導(dǎo)出json格式
?????????? ????????????scrapy crawl qiubai -o qiubai.json
?????????? ????????????scrapy crawl qiubai -o qiubai.xml
?????????? ????????????scrapy crawl qiubai -o qiubai.csv
????? 【注】window 安裝問題參考
? ?????????????pip install Scrapy
? ? ? ? ? ? ? ?building 'twisted.test.raiser' extension
? ? ? ? ? ? ? ?error: Microsoft Visual C++ 14.0 is required.Get it with "Microsoft Visual C++? ????????????????????????BuildTools": http://landinghub.visualstudio.com/visual-cpp-build-tools
? ? ? ? ? ? ? 解決方案::
? ? ? ? ? ? ? ? ? ? 1- 在http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 下載twisted
? ? ? ? ? ? ? ? ? ? ? 對應(yīng)版本的whl文件(如我的Twisted-17.5.0-cp36-cp36m-win_amd64.whl)
? ? ? ? ? ? ? ? ? ? ? cp后面是python版本微峰,amd64代表64位,運(yùn)行命令:
? ? ? ? ? ? ? ? ? 2-pip install? ?C:\Users\CR\Downloads\Twisted-17.5.0-cp36-cp36m-win_amd64.whl
? ? ? ? ? ? ? ? ? 3-pip install Scrapy
四:作業(yè)
?? 1-完成課堂代碼?
? ?2-用框架實(shí)現(xiàn)糗事百科糗圖抓取并保存為一個json文件
? ??????????https://www.qiushibaike.com/pic/
? ?3-用框架實(shí)現(xiàn)站長素材高清圖片抓取并保存為一個json文件
? ??????????http://sc.chinaz.com/tupian/shanshuifengjing.html
? ?4-用框架實(shí)現(xiàn)斗圖啦-表情模板-抓取并保存為一個json文件
? ??????????http://www.doutula.com/zz/list/