1.scrapy爬蟲框架的使用:
一 Scrapy爬蟲框架
發(fā)送請(qǐng)求 ---> 獲取響應(yīng)數(shù)據(jù) ---> 解析數(shù)據(jù) ---> 保存數(shù)據(jù)
** Scarpy框架介紹 **
1未玻、引擎(EGINE)
引擎負(fù)責(zé)控制系統(tǒng)所有組件之間的數(shù)據(jù)流,并在某些動(dòng)作發(fā)生時(shí)觸發(fā)事件胡控。有關(guān)詳細(xì)信息扳剿,請(qǐng)參見上面的數(shù)據(jù)流部分。
2昼激、調(diào)度器(SCHEDULER)
用來接受引擎發(fā)過來的請(qǐng)求, 壓入隊(duì)列中, 并在引擎再次請(qǐng)求的時(shí)候返回. 可以想像成一個(gè)URL的優(yōu)先級(jí)隊(duì)列, 由它來決定下一個(gè)要抓取的網(wǎng)址是什么, 同時(shí)去除重復(fù)的網(wǎng)址
3庇绽、下載器(DOWLOADER)
用于下載網(wǎng)頁內(nèi)容, 并將網(wǎng)頁內(nèi)容返回給EGINE,下載器是建立在twisted這個(gè)高效的異步模型上的
4橙困、爬蟲(SPIDERS)
SPIDERS是開發(fā)人員自定義的類瞧掺,用來解析responses,并且提取items凡傅,或者發(fā)送新的請(qǐng)求
5辟狈、項(xiàng)目管道(ITEM PIPLINES)
在items被提取后負(fù)責(zé)處理它們,主要包括清理像捶、驗(yàn)證上陕、持久化(比如存到數(shù)據(jù)庫)等操作
下載器中間件(Downloader Middlewares)位于Scrapy引擎和下載器之間,主要用來處理從EGINE傳到DOWLOADER的請(qǐng)求request拓春,已經(jīng)從DOWNLOADER傳到EGINE的響應(yīng)response释簿,
你可用該中間件做以下幾件事:
(1) process a request just before it is sent to the Downloader (i.e. right before Scrapy sends the request to the website);
(2) change received response before passing it to a spider;
(3) send a new Request instead of passing received response to a spider;
(4) pass response to a spider without fetching a web page;
(5) silently drop some requests.
6、爬蟲中間件(Spider Middlewares)
位于EGINE和SPIDERS之間硼莽,主要工作是處理SPIDERS的輸入(即responses)和輸出(即requests)
** Scarpy安裝 **
1庶溶、pip3 install wheel
2煮纵、pip3 install lxml
3、pip3 install pyopenssl
4偏螺、pip3 install pypiwin32
5行疏、安裝twisted框架
下載twisted
http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
安裝下載好的twisted
pip3 install 下載目錄\Twisted-17.9.0-cp36-cp36m-win_amd64.whl
6、pip3 install scrapy
** Scarpy使用 **
1套像、進(jìn)入終端cmd
- scrapy
C:\Users\administortra>scrapy
Scrapy 1.6.0 - no active project
2酿联、創(chuàng)建scrapy項(xiàng)目
1.創(chuàng)建一個(gè)文件夾,專門用于存放scrapy項(xiàng)目
- D:\Scrapy_prject
2.cmd終端輸入命令
scrapy startproject Spider_Project( 項(xiàng)目名)
- 會(huì)在 D:\Scrapy_prject文件夾下會(huì)生成一個(gè)文件
Spider_Project : Scrapy項(xiàng)目文件
3.創(chuàng)建爬蟲程序
cd Spider_Project # 切換到scrapy項(xiàng)目目錄下
# 爬蟲程序名稱 目標(biāo)網(wǎng)站域名
scrapy genspider baidu www.baidu.com # 創(chuàng)建爬蟲程序
3夺巩、啟動(dòng)scrapy項(xiàng)目贞让,執(zhí)行爬蟲程序
# 找到爬蟲程序文件進(jìn)行執(zhí)行
scrapy runspider只能執(zhí)行某個(gè) 爬蟲程序.py
# 切換到爬蟲程序執(zhí)行文件目錄下
- cd D:\Scrapy_prject\Spider_Project\Spider_Project\spiders
- scrapy runspider baidu.py
# 根據(jù)爬蟲名稱找到相應(yīng)的爬蟲程序執(zhí)行
scrapy crawl 爬蟲程序名稱
# 切換到項(xiàng)目目錄下
- cd D:\Scrapy_prject\Spider_Project
- scrapy crawl baidu
2.微信機(jī)器人:
安裝:wxpy 支持 Python 3.4-3.6,以及 2.7 版本
pip3 install -U wxpy
安裝 pillow模塊
pip3 install pillow
安裝 pyecharts模塊
pip3 install pyecharts
$ pip3 install echarts-countries-pypkg
$ pip3 install echarts-china-provinces-pypkg
$ pip3 install echarts-china-cities-pypkg
$ pip3 install echarts-china-counties-pypkg
$ pip3 install echarts-china-misc-pypkg
from?wxpy?import?*
bot?=?Bot()
bot?=?Bot(cache_path=True)?# 必須先登錄過一次以后才可以使用緩存
from?wxpy?import?Bot
from?pyecharts?import?Pie
import?webbrowser
# 實(shí)例化一個(gè)微信機(jī)器人對(duì)象
bot?=?Bot()
# 獲取到微信的所有好友
friends?=?bot.friends()
# 設(shè)定男性\女性\位置性別好友名稱
attr?=?['男朋友',?'女朋友',?'未知']
# 初始化對(duì)應(yīng)好友數(shù)量
value?=?[0,?0,?0]
# 遍歷所有的好友,判斷這個(gè)好友是男性還是女性
for?friend?in?friends:
????if?friend.sex?==?1:
????????value[0]?+=?1
????elif?friend.sex?==?2:
????????value[1]?+=?1
????else:
????????value[2]?+=?1
# 實(shí)例化一個(gè)餅狀圖對(duì)象
pie?=?Pie('hao的好友們!')
# 圖表名稱str柳譬,屬性名稱list喳张,屬性所對(duì)應(yīng)的值list,is_label_show是否現(xiàn)在標(biāo)簽
pie.add('', attr, value, is_label_show=True)
# 生成一個(gè)html文件
pie.render('friends.html')
# 打開html文件
webbrowser.open('friends.html')
from?wxpy?import?*
from?pyecharts?import?Map
import?webbrowser
bot=Bot(cache_path=True)
friends=bot.friends()
area_dic={}#定義一個(gè)字典,用來存放省市以及省市人數(shù)
for?friend?in?friends:
????if?friend.province?not?in?area_dic:
????????area_dic[friend.province]=1
????else:
????????area_dic[friend.province]+=1
attr?=?area_dic.keys()
value?=?area_dic.values()
map?=?Map("好朋友們的地域分布", width=1200, height=600)
map.add(
????"好友地域分布",
????attr,
????value,
????maptype='china',
????is_visualmap=True,?#結(jié)合體VisualMap
)
#is_visualmap -> bool 是否使用視覺映射組件
#
map.render('area.html')
webbrowser.open("area.html")
bot.file_helper.send('lqz say hello')
from?wxpy?import?*
bot=Bot(cache_path=True)
@bot.register()
def?recv_send_msg(recv_msg):
????print('收到的消息:',recv_msg.text)?# recv_msg.text取得文本
????return?'自動(dòng)回復(fù):%s'?%recv_msg.text
# 進(jìn)入Python命令行美澳,讓程序保持運(yùn)行
embed()
from?wxpy?import?*
bot=Bot(cache_path=True)
girl_friend=bot.search('女朋友的備注名稱')[0]
print(girl_friend)
@bot.register()?# 接收從指定好友發(fā)來的消息销部,發(fā)送者即recv_msg.sender為指定好友girl_friend
def?recv_send_msg(recv_msg):
????print('收到的消息:',recv_msg.text)?# recv_msg.text取得文本
????if?recv_msg.sender?==?girl_friend:
????????recv_msg.forward(bot.file_helper,prefix='老婆留言: ')?#在文件傳輸助手里留一份,方便自己忙完了回頭查看
????????ms='老婆最美麗制跟,我對(duì)老婆的愛如滔滔江水舅桩,連綿不絕'
????????print('>>>給老婆回復(fù)的:', ms)
????????return?ms#給老婆回一份
embed()
from?wxpy?import?*
bot=Bot(cache_path=True)
company_group=bot.groups().search('群名字')[0]
boss=company_group.search('老板名字')[0]
@bot.register(chats=company_group)?#接收從指定群發(fā)來的消息,發(fā)送者即recv_msg.sender為組
def?recv_send_msg(recv_msg):
????print('收到的消息:',recv_msg.text)
????if?recv_msg.member?==?boss:
????????#這里不用recv_msg.render 因?yàn)閞ender是群的名字
????????recv_msg.forward(bot.file_helper,prefix='老板發(fā)言: ')
????????return?'老板說的好有道理凫岖,深受啟發(fā)'
import?json
import?requests
from?wxpy?import?*
bot?=?Bot(cache_path=True)
# 調(diào)用圖靈機(jī)器人API江咳,發(fā)送消息并獲得機(jī)器人的回復(fù)
def?auto_reply(text):
????url?=?"http://www.tuling123.com/openapi/api"
????api_key?=?"9df516a74fc443769b233b01e8536a42"
????payload?=?{
????????"key": api_key,
????????"info": text,
????}
????r?=?requests.post(url, data=json.dumps(payload))
????result?=?json.loads(r.content)
????return?"[來自智能機(jī)器人] "?+?result["text"]
@bot.register()
def?forward_message(msg):
????return?auto_reply(msg.text)
embed()
import?json
import?requests
from?wxpy?import?*
bot?=?Bot(cache_path=False)
group=bot.groups().search('群名字')[0]
print(group)
# 調(diào)用圖靈機(jī)器人API逢净,發(fā)送消息并獲得機(jī)器人的回復(fù)
def?auto_reply(text):
????url?=?"http://www.tuling123.com/openapi/api"
????api_key?=?"9d602fe417464cd18beb2083d064bee6"
????payload?=?{
????????"key": api_key,
????????"info": text,
????}
????r?=?requests.post(url, data=json.dumps(payload))
????result?=?json.loads(r.content)
????return?"[來自智能機(jī)器人] "?+?result["text"]
@bot.register(chats=group)
def?forward_message(msg):
????return?auto_reply(msg.text)
embed()
import?requests
from?wxpy?import?*
bot?=?Bot( cache_path=True)
girl_friend=bot.search('名字r')[0]
# 調(diào)用圖靈機(jī)器人API哥放,發(fā)送消息并獲得機(jī)器人的回復(fù)
def?auto_reply(text):
????url?=?"http://www.tuling123.com/openapi/api"
????api_key?=?"申請(qǐng)圖靈機(jī)器人獲取key值放到這里"
????payload?=?{
????????"key": api_key,
????????"info": text,
????}
????r?=?requests.post(url, data=json.dumps(payload))
????result?=?json.loads(r.content)
????return?"[微信測試,請(qǐng)忽略] "?+?result["text"]
@bot.register()
def?forward_message(msg):
????if?msg.sender?==?girl_friend:
????????return?auto_reply(msg.text)
embed()