日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

22、Python快速開(kāi)發(fā)分布式搜索引擎Scrapy精講—scrapy模擬登陸

系統(tǒng) 2362 0

【百度云搜索,搜各種資料:http://www.bdyss.cn】

【搜網(wǎng)盤,搜各種資料:http://www.swpan.cn】

第一步。首先下載,大神者也的倒立文字驗(yàn)證碼識(shí)別程序

下載地址:https://github.com/muchrooms/...

注意:此程序依賴以下模塊包

  Keras==2.0.1
  Pillow==3.4.2
  jupyter==1.0.0
  matplotlib==1.5.3
  numpy==1.12.1
  scikit-learn==0.18.1
  tensorflow==1.0.1
  h5py==2.6.0

numpy-1.13.1+mkl

我們用豆瓣園來(lái)加速安以上依賴裝如:

          
            pip?install?-i?https://pypi.douban.com/simple?h5py==2.6.0
          
        

如果是win系統(tǒng),可能存在安裝失敗的可能,如果那個(gè)包安裝失敗,就到 http://www.lfd.uci.edu/~gohlk... ?找到win對(duì)應(yīng)的版本下載到本地安裝,如:

          
            pip?install?h5py-2.7.0-cp35-cp35m-win_amd64.whl
          
        

第二步,將者也的,驗(yàn)證碼識(shí)別程序的zheye文件夾放到工程目錄里

第三步,爬蟲(chóng)實(shí)現(xiàn)

start_requests()方法,起始url函數(shù),會(huì)替換start_urls

Request()方法,get方式請(qǐng)求網(wǎng)頁(yè)
  url=字符串類型url
  headers=字典類型瀏覽器代理
  meta=字典類型的數(shù)據(jù),會(huì)傳遞給回調(diào)函數(shù)
  callback=回調(diào)函數(shù)名稱

scrapy.FormRequest()post方式提交數(shù)據(jù)
  url=字符串類型url
  headers=字典類型瀏覽器代理
  meta=字典類型的數(shù)據(jù),會(huì)傳遞給回調(diào)函數(shù)
  callback=回調(diào)函數(shù)名稱
  formdata=字典類型,要提交的數(shù)據(jù)字段

response.headers.getlist('Set-Cookie')?獲取響應(yīng)Cookies
response.request.headers.getlist('Cookie')?獲取請(qǐng)求Cookies

          
            #?-*-?coding:?utf-8?-*-
import?scrapy
from?scrapy.http?import?Request,FormRequest
import?re

class?PachSpider(scrapy.Spider):????????????????????????????#定義爬蟲(chóng)類,必須繼承scrapy.Spider
????name?=?'pach'???????????????????????????????????????????#設(shè)置爬蟲(chóng)名稱
????allowed_domains?=?['zhihu.com']????????????????????#爬取域名
????#?start_urls?=?['']?????????????????????????????????????#爬取網(wǎng)址,只適于不需要登錄的請(qǐng)求,因?yàn)闆](méi)法設(shè)置cookie等信息

????header?=?{'User-Agent':'Mozilla/5.0?(Windows?NT?10.0;?WOW64;?rv:54.0)?Gecko/20100101?Firefox/54.0'}??#設(shè)置瀏覽器用戶代理

????def?start_requests(self):????#起始url函數(shù),會(huì)替換start_urls
????????"""第一次請(qǐng)求一下登錄頁(yè)面,設(shè)置開(kāi)啟cookie使其得到cookie,設(shè)置回調(diào)函數(shù)"""
????????return?[Request(
????????????url='https://www.zhihu.com/#signin',
????????????headers=self.header,
????????????meta={'cookiejar':1},???????#開(kāi)啟Cookies記錄,將Cookies傳給回調(diào)函數(shù)
????????????callback=self.parse
????????)]

????def?parse(self,?response):
????????#?響應(yīng)Cookies
????????Cookie1?=?response.headers.getlist('Set-Cookie')????????????????????????????#查看一下響應(yīng)Cookie,也就是第一次訪問(wèn)注冊(cè)頁(yè)面時(shí)后臺(tái)寫入瀏覽器的Cookie
????????print('后臺(tái)首次寫入的響應(yīng)Cookies:',Cookie1)

????????#獲取xsrf密串
????????xsrf?=?response.xpath('//input[@name="_xsrf"]/@value').extract()[0]
????????print('獲取xsrf密串:'?+?xsrf)

????????#獲取驗(yàn)證碼?????????
????????import?time?????????
????????t?=?str(int(time.time()*1000))?????????
????????captcha_url?=?'https://www.zhihu.com/captcha.gif?r={0}&type=login?=cn'.format(t)???#構(gòu)造驗(yàn)證碼請(qǐng)求地址
????????yield?Request(url=captcha_url,?????????????????????????????????????????????????????????#請(qǐng)求驗(yàn)證碼圖片
??????????????????????headers=self.header,
??????????????????????meta={'cookiejar':response.meta['cookiejar'],'xsrf':xsrf},???????????????#將Cookies和xsrf密串傳給回調(diào)函數(shù)
??????????????????????callback=self.post_tj
??????????????????????)

????def?post_tj(self,?response):
????????with?open('yzhm.jpg','wb')?as?f:????????#打開(kāi)圖片句柄
????????????f.write(response.body)??????????????#將驗(yàn)證碼圖片寫入本地
????????????f.close()???????????????????????????#關(guān)閉句柄

#---------------------------者也驗(yàn)證碼識(shí)別-----------------------

????????from?zheye?import?zheye?????????????????#導(dǎo)入者也倒立文字驗(yàn)證碼識(shí)別模塊對(duì)象
????????z?=?zheye()?????????????????????????????#實(shí)例化對(duì)象
????????positions?=?z.Recognize('yzhm.jpg')?????#將驗(yàn)證碼本地路徑傳入Recognize方法識(shí)別,返回倒立圖片的坐標(biāo)
????????#?print(positions)??????????????????????#默認(rèn)倒立文字的y坐標(biāo)在前,x坐標(biāo)在后

????????#知乎網(wǎng)要求的倒立文字坐標(biāo)是x軸在前,y軸在后,所以我們需要定義一個(gè)列表來(lái)改變默認(rèn)的,倒立文字坐標(biāo)位置
????????pos_arr?=?[]
????????if?len(positions)?==?2:
????????????if?positions[0][1]?>?positions[1][1]:??????????????????????#判斷列表里第一個(gè)元祖里的第二個(gè)元素如果大于,第二個(gè)元祖里的第二個(gè)元素
????????????????pos_arr.append([positions[1][1],positions[1][0]])
????????????????pos_arr.append([positions[0][1],?positions[0][0]])
????????????else:
????????????????pos_arr.append([positions[0][1],?positions[0][0]])
????????????????pos_arr.append([positions[1][1],?positions[1][0]])
????????else:
????????????pos_arr.append([positions[0][1],?positions[0][0]])

????????print('處理后的驗(yàn)證碼坐標(biāo)',pos_arr)

#?-------------者也驗(yàn)證碼識(shí)別結(jié)束--------

????????if?len(pos_arr)?==?2:
????????????data?=?{????????????????????????????????????????????????????????????????????#?設(shè)置用戶登錄信息,對(duì)應(yīng)抓包得到字段
????????????????'_xsrf':?response.meta['xsrf'],
????????????????'password':?'279819',
????????????????'captcha':?'{"img_size":[200,44],"input_points":[[%.2f,%f],[%.2f,%f]]}'?%(
????????????????????pos_arr[0][0]?/?2,?pos_arr[0][1]?/?2,?pos_arr[1][0]?/?2,?pos_arr[1][1]?/?2),??#因?yàn)轵?yàn)證碼識(shí)別默認(rèn)是400X88的尺寸所以要除以2
????????????????'captcha_type':?'cn',
????????????????'phone_num':?'15284816568'
????????????}
????????else:
????????????data?=?{????????????????????????????????????????????????????????????????????#?設(shè)置用戶登錄信息,對(duì)應(yīng)抓包得到字段
????????????????'_xsrf':?response.meta['xsrf'],
????????????????'password':?'279819',
????????????????'captcha':?'{"img_size":[200,44],"input_points":[[%.2f,%f]]}'?%(
????????????????????pos_arr[0][0]?/?2,?pos_arr[0][1]?/?2),
????????????????'captcha_type':?'cn',
????????????????'phone_num':?'15284816568'
????????????}

????????print('登錄提交數(shù)據(jù)',data)

????????print('登錄中....!')
????????"""第二次用表單post請(qǐng)求,攜帶Cookie、瀏覽器代理、用戶登錄信息,進(jìn)行登錄給Cookie授權(quán)"""
????????return?[scrapy.FormRequest(
????????????url='https://www.zhihu.com/login/phone_num',????????????????????????#真實(shí)post地址
????????????meta={'cookiejar':response.meta['cookiejar']},??????????????????????#接收第傳過(guò)來(lái)的Cookies
????????????headers=self.header,
????????????formdata=data,
????????????callback=self.next
????????)]

????def?next(self,response):
????????#?請(qǐng)求Cookie
????????Cookie2?=?response.request.headers.getlist('Cookie')
????????print('登錄時(shí)攜帶請(qǐng)求的Cookies:',Cookie2)

????????jieg?=?response.body.decode("utf-8")???#登錄后可以查看一下登錄響應(yīng)信息
????????print('登錄響應(yīng)結(jié)果:',jieg)

????????print('正在請(qǐng)需要登錄才可以訪問(wèn)的頁(yè)面....!')

????????"""登錄后請(qǐng)求需要登錄才能查看的頁(yè)面,如個(gè)人中心,攜帶授權(quán)后的Cookie請(qǐng)求"""
????????yield?Request(
????????????url='https://www.zhihu.com/people/lin-gui-xiu-41/activities',
????????????headers=self.header,
????????????meta={'cookiejar':True},
????????????callback=self.next2
????????)

????def?next2(self,response):
????????#?請(qǐng)求Cookie
????????Cookie3?=?response.request.headers.getlist('Cookie')
????????print('查看需要登錄才可以訪問(wèn)的頁(yè)面攜帶Cookies:',Cookie3)

????????leir?=?response.xpath('/html/head/title/text()').extract()??#得到個(gè)人中心頁(yè)面
????????print('最終內(nèi)容',leir)
????????#?print(response.body.decode("utf-8"))
          
        


【轉(zhuǎn)載自:http://www.lqkweb.com】


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 巴马| 南康市| 比如县| 赞皇县| 白玉县| 金堂县| 阿合奇县| 鹿泉市| 晋州市| 佛坪县| 株洲县| 淅川县| 彰化县| 大新县| 金华市| 潼关县| 清流县| 柯坪县| 东港市| 房产| 莱芜市| 大名县| 上林县| 广水市| 靖远县| 濉溪县| 蓬莱市| 庆城县| 连州市| 区。| 赤水市| 车险| 德保县| 三门县| 西乌珠穆沁旗| 安达市| 张家口市| 丰宁| 治县。| 巴楚县| 宁海县|