scrapy模拟登录的cookie问题

whliyujiajia 2017-04-20 03:45:21
[size=16px]如题,我想利用scrapy框架实现模拟登录一个小说网,然后爬下来我的书架里的一些数据(这个模块只有登录后才能看),一开始我在request里用meta传递'cookiejar',然后一直是只能成功登录,但是一要抓取我的书架时就是出现302重定向的错误,我抓包发现是我抓取我的书架页面时没有把我的登录cookie信息传过去,所以程序想去抓取我的书架这个url时cookie还是登录之前的状态,所以什么也抓不到。后来我瞎改,把request里用meta传递'cookiejar'这一行里的cookiejar改成了cookie,居然运行成功了,我又试着直接把这个属性删了,还是能运行成功,但是网上的好多实例代码都是有这句话的,很不明白为什么,请大神指教。(用的python,在ubuntu环境下)[/size]

import json
import os
import urllib
import urllib2
import cookielib
from scrapy.http import Request, FormRequest,HtmlResponse
from scrapy.selector import Selector
try:
from scrapy.spider import Spider
except:
from scrapy.spider import BaseSpider as Spider
from scrapy.utils.response import get_base_url
from scrapy.utils.url import urljoin_rfc
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from itzhaopin.items import *
from itzhaopin.misc.log import *

class TencentSpider(CrawlSpider):

name = "login_dingdian"
allowed_domains = ["23us.com"] #设定域名
start_urls = [
"http://www.23us.com/"

]
rules = [ # 定义爬取URL的规则
Rule(SgmlLinkExtractor(allow=("/modules/article/bookcase.php?")), follow=True, callback='parse_item')
]

headers = {

"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Encoding": "gzip,deflate",
"Accept-Language": "en-US,en;q=0.5",
"Connection": "keep-alive",
"Content-Type":" application/x-www-form-urlencoded",
"Referer": "http://www.23us.com/login.php?do=submit"
}

def start_requests(self):

return [Request("http://www.23us.com/login.php?do=submit",meta = {'cookiejar':1}, headers = self.headers,callback = self.post_login)]
#!!!!就是这句话,要是把cookiejar改成cookie或是直接整句话去掉程序就能运行成功
def post_login(self, response):
print '---------------Preparing login------------'
#登陆成功后, 会调用after_login回调函数
return [FormRequest.from_response(response,
meta={'cookiejar': response.meta['cookiejar']},#!!!!就是这句话,要是把cookiejar改成cookie或是直接整句话去掉程序就能运行成功
formdata = {
'username':'whtest',
'password':'******',
'usecookie':'2592000',
'action':'login',
'submit':' µÇ  Â¼ '

},
callback = self.after_login,
dont_filter = True,

)]

def after_login(self, response) :

for url in self.start_urls :
req = Request(url)
req.meta['cookiejar'] = response.meta['cookiejar']#!!!!就是这句话,要是把cookiejar改成cookie或是直接整句话去掉程序就能运行成功

return req

def parse_item(self, response): # 提取数据到Items里面,主要用到XPath和CSS选择器提取网页数据
print '----------------------------进入parse_item----------'

items = []
sel = Selector(response)
base_url = get_base_url(response)

sites_even = sel.css('table.grid')
for site in sites_even:
print "-----------------------进入循环进行内容挑选---------------------"
item = TencentItem()
item['name'] = site.css('td.even a[target="_blank"]').xpath('text()').extract()#css('.even').
item['updatechapter'] = site.css('td.odd a[target="_blank"]').xpath('text()').extract()
items.append(item)
print repr(item).decode("unicode-escape") + '\n'

return items

def _process_request(self, request):

return request
...全文
443 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这个到别的模块去提问吧@mymtom @Wenxy1
whliyujiajia 2017-05-04
  • 打赏
  • 举报
回复
顶顶。。。。。。

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧