scrapy 模擬登陸2

from scrapy.spidersimport BaseSpider

from scrapy.spiders.initimport InitSpider

from scrapy.httpimport Request, FormRequest

from scrapy.linkextractorsimport LinkExtractor

from scrapy.spidersimport Rule

from scrapy.selectorimport Selector

from scrapy.http.cookiesimport CookieJar

from urllib.parseimport urlparse,urlunparse,parse_qs,parse_qsl

import re

import json

# import MySQLdb

import datetime

import sys

import traceback

# import deathbycaptcha

# import captcha_log

import urllib.request

import hashlib

sys.path.append("..")

# from common.db import DB

# from common.task import TASK

class LoginTestSpider(InitSpider):

name ='login_test'

? ? # allowed_domains = ['www.amazon.com']

? ? platform ='amazon'

? ? # no_proxy = True

? ? cookie_jar = CookieJar()

# login_page = order_page = "https://search.glamaslee.com"

? ? login_page = order_page ="https://www.amazon.com/gp/css/order-history/"

? ? email ='xxxxxxxxxxxxx'

? ? password ='lxxxxxxxxxxxxxx'

? ? try_login_max_time =3

? ? #

# db = DB()

# db.connect()

# cur = db.cursor()

? ? start_urls = []

def init_request(self):

"""This function is called before crawling starts."""

? ? ? ? return Request(url=self.login_page,callback=self.check_login,cookies=self.get_cookie())

# return Request(url='https://ip.cn/',callback=self.parse_ip)

? ? def set_cookie(self,response):

cookie_jar =self.cookie_jar

cookie_jar.extract_cookies(response, response.request)

with open('./cookies.txt','w')as f:

p = re.compile(r'')

cookies_final = {}

for itemin cookie_jar:

# f.write(str(cookie) + '\n')

? ? ? ? ? ? ? ? cookies = re.findall(p,str(item))

cookies = (cookie.split('=',1)for cookiein cookies)

cookies =dict(cookies)

cookies_final.update(cookies)

f.write(json.dumps(cookies_final))

def get_cookie(self):

cookie_jar =self.cookie_jar

try:

cookies = {}

with open('./cookies.txt','r+')as f:

data = f.read()

if data:

cookies = json.loads(data)

#? ? cookie_jar = f.read()

#? ? p = re.compile(r'')

#? ? cookies = re.findall(p, cookie_jar)

#? ? cookies = (cookie.split('=', 1) for cookie in cookies)

#? ? cookies = dict(cookies)

? ? ? ? ? ? return cookies

except IOError as e:

return {}

def check_login(self, response):

last_step = response.meta['step']if 'step' in response.metaelse 1

? ? ? ? try_times = response.meta['try_times']if 'try_times' in response.metaelse 0

? ? ? ? sel = Selector(response)

step =99

? ? ? ? email_input_ele = sel.xpath("http://input[@id='ap_email']")

password_input_ele = sel.xpath("http://input[@id='ap_password']")

continue_ele = sel.xpath("http://input[@id='continue']")

verify_code_ele = sel.xpath("http://input[@name='code']")

if email_input_eleand not password_input_ele:

step =1

? ? ? ? if email_input_eleand password_input_ele:

step =2

? ? ? ? if not email_input_eleand not password_input_eleand continue_ele:

step =3

? ? ? ? if not email_input_eleand not password_input_eleand not continue_eleand verify_code_ele:

step =4

? ? ? ? print( step)

if last_step == step :

try_times +=1

? ? ? ? if try_times >self.try_login_max_time:

return None

? ? ? ? if step ==1:

return FormRequest.from_response(response,

formdata={'email':self.email},

callback=self.check_login,

meta={'step':step,'try_times':try_times})

elif step ==2:

with open('./login.html','wb+')as f:

f.write(response.body)

formdata = {'email':self.email,'password':self.password}

captcha_img = sel.xpath("http://img[contains(@src,'captcha')]/@src")

if captcha_img:

captcha_filename ='./captcha.jpg'

? ? ? ? ? ? ? ? # captcha_filename = './captcha_'+datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")+".jpg"

? ? ? ? ? ? ? ? urllib.request.urlretrieve(captcha_img.extract_first(), captcha_filename)

guess =input('enter captcha code : ')

formdata['guess'] = guess

return FormRequest.from_response(response,

formdata=formdata,

callback=self.check_login,

meta={'step':step,'try_times':try_times})

elif step ==3:

formdata = {}

return FormRequest.from_response(response,

formdata=formdata,

callback=self.check_login,

meta={'step':step,'try_times':try_times})

elif step ==4:

code =input('enter verify code : ')

formdata = {'code':code}

return FormRequest.from_response(response,

formdata=formdata,

callback=self.check_login,

meta={'step':step,'try_times':try_times})

elif step ==99:

self.set_cookie(response)

return self.after_login(response)

def after_login(self,response):

# with open('./login.html', 'w+') as f:

#? ? f.write(response.body)

? ? ? ? url ="https://www.amazon.com/dp/B00OQVZDJM/"

? ? ? ? self.start_urls.append(url)

return self.initialized()

def parse(self, response):

with open('./login.html','wb+')as f:

f.write(response.body)

print( response.url)

self.log('Start Crawl ...')

return Request(url='http://ip4.me/',callback=self.parse_ip)

def parse_ip(self, response):

# jsonresponse = json.loads(response.body_as_unicode())

# print(jsonresponse)

? ? ? ? sel = Selector(response)

ip_str = sel.xpath('//td[@bgcolor="D0D0F0"]//text()').extract()

self.log('\n'.join(ip_str))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末潮峦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子勇婴,更是在濱河造成了極大的恐慌忱嘹,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耕渴,死亡現(xiàn)場(chǎng)離奇詭異德谅,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)萨螺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門窄做,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)愧驱,“玉大人,你說(shuō)我怎么就攤上這事椭盏∽檠猓” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵掏颊,是天一觀的道長(zhǎng)糟红。 經(jīng)常有香客問(wèn)我,道長(zhǎng)乌叶,這世上最難降的妖魔是什么盆偿? 我笑而不...
    開(kāi)封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮准浴,結(jié)果婚禮上事扭,老公的妹妹穿的比我還像新娘。我一直安慰自己乐横,他們只是感情好求橄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著葡公,像睡著了一般罐农。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上催什,一...
    開(kāi)封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天涵亏,我揣著相機(jī)與錄音,去河邊找鬼蒲凶。 笑死气筋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的豹爹。 我是一名探鬼主播裆悄,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼矛纹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼臂聋!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起或南,我...
    開(kāi)封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤孩等,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后采够,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體肄方,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年蹬癌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了权她。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虹茶。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖隅要,靈堂內(nèi)的尸體忽然破棺而出蝴罪,到底是詐尸還是另有隱情,我是刑警寧澤步清,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布要门,位于F島的核電站,受9級(jí)特大地震影響廓啊,放射性物質(zhì)發(fā)生泄漏欢搜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一谴轮、第九天 我趴在偏房一處隱蔽的房頂上張望炒瘟。 院中可真熱鬧,春花似錦书聚、人聲如沸唧领。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)斩个。三九已至,卻和暖如春驯杜,著一層夾襖步出監(jiān)牢的瞬間受啥,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工鸽心, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滚局,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓顽频,卻偏偏與公主長(zhǎng)得像藤肢,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子糯景,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

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

  • # -*- coding: utf-8 -*- import scrapy,requests from scrap...
    戒靈閱讀 659評(píng)論 0 6
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理嘁圈,服務(wù)發(fā)現(xiàn),斷路器蟀淮,智...
    卡卡羅2017閱讀 134,652評(píng)論 18 139
  • 折騰了將近兩天最住,中間數(shù)次想要放棄,還好硬著頭皮搞下去了怠惶,在此分享出來(lái)涨缚,希望有同等需求的各位能少走一些彎路。源碼放在...
    brantou閱讀 468評(píng)論 2 7
  • scrapy學(xué)習(xí)筆記(有示例版) 我的博客 scrapy學(xué)習(xí)筆記1.使用scrapy1.1創(chuàng)建工程1.2創(chuàng)建爬蟲(chóng)模...
    陳思煜閱讀 12,696評(píng)論 4 46
  • 生活之中策治,我們往往知道的太多脓魏,做到的少兰吟,到底為什么呢,這里面有很多是自己的主觀因素茂翔,我們自己有的時(shí)候是基于過(guò)去的經(jīng)...
    愛(ài)書人何偉閱讀 396評(píng)論 1 2