ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

模拟登陆(入门级认知)_python爬虫

2021-12-04 00:01:56  阅读:220  来源: 互联网

标签:cookiejar python self 爬虫 入门级 scrapy meta http response


好久没发博客,突然想发出来:

“While we teach ,we learn”
欢迎提问

'''
模拟登陆思路:
进入登陆页面 post带有form的数据 。。。至此完事
1.
具体实现
.1重写start_request方法 进入登录页面 ,获得response 后使用回调函数将拿到的response给到将要使用的方法(还需要设置cook为开启状态)
.2发送post请求  FormRequest.from_response 方法里面写了5个参数
.3至此成功
2.
.1可以理解为打包发送的内容中含有header 具体实现:传入时 何种形式字典形式 self.head 调用属性 提供了一种思路 发送的时候统统打包发送
3.
类里的方法调用带括号和不带括号区别:
加括号的是类的实例化;不加括号就不是启动实例,
比如 不实例化时可直接调用内部初始变量,实例化后,变量可能被init处理,改变了初始值
4.Request类的参数含义,其返回值为response
                 # url是要爬取的网址
                 # callback是回调函数
                 # method是请求的方式post还是get
                 # headers是浏览器伪装的头信息
                 # body是网页源代码信息
                 # cookies是登入某网站后,网站在你电脑上保留的信息
                 # meta要携带或者传递的信息
                 # encoding是编码方式
                 # priority用来设置访问网站的优先级
                 # dont_filter是否允许重复爬取网站
'''
import scrapy
from scrapy.http import Request
from scrapy.http import FormRequest
class MndSpider(scrapy.Spider):
    path = 'C:\\Users\\Administrator\\Desktop\\Python基础与应用\\爬虫\\scrapy爬取\\'
    name = 'mnd'
    allowed_domains = ['51pptmoban.com']
    #start_urls = ['http://www.51pptmoban.com/e/member/doaction.php']
    header = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
    def start_requests(self):#此方法返回一个可迭代对象 用yield本身就是可迭代对象,若是return,用[]将其构造成一个可迭代对象
        #首先爬一次登录页,然后进入回调函数parse()#设置cook为开启状态 callback :找到设置的回调的函数然后执行
        #url='http://www.51pptmoban.com/e/member/doaction.php'
        return [Request('http://www.51pptmoban.com/e/member/login/',headers= self.header,meta={'cookiejar':1},callback=self.parse)]#返回了一个数组 那个东西是response#字典里数字加上英豪就成了自负了 看颜色
    def parse(self, response):
        data = {
            "username" : "你自己写",
            "password" : "你自己写"
        }
        print("登陆中...")#特殊的请求方式,表单方式的请求
        return [FormRequest.from_response(response,#此处为何用列表
                                          meta = {'cookiejar':response.meta['cookiejar']},#字典的调用方法 相当于使用的cookiejar对应的values值
                                          #mata = response.meta,#这种写法错误的
                                          headers = self.header,#字典
                                          formdata= data,#字典 而且在内部不需要使用self
                                          callback = self.next,
                                          )] #此时的response已经是登录进入的页面了

    '''
    对于提交表单有2种方式,上述为一种,此种必须要有response,
            适用于输入网站出现的页面有表单信息的,他可以自动识别要post的url
            第二种:scrapy.FormRequest 必须输入的除了必要表单数据 他需要的是确定的要post的url,而不是response,respon
            是整个页面数据,需要自动识别
            即 scrapy.FormRequest更加强大    
    '''
    def next(self,response):
        print("方法进入了吗")
        a = response.body#返回的是byte类型
        #a =response.text #返回的是文本形式的html类型 也就是字符串
        #response.text = response.body.decode(response.encoding)
        with open(self.path+'登录页面.html','wb') as f:
            f.write(a)
        #Xpath是一门在xml文档中查找信息的语言,XPath可用来在xml文档中对元素和属性进行遍历按照规律查找信息
        print(response.xpath('/html/head//title/text()').extract())
        yield Request("http://www.51pptmoban.com/e/member/EditInfo/",callback=self.next2,meta={"cookiejar":True})#设置为cookiejar保存状态

    def next2(self,response):
        print(response.xpath('//html//head//title//text()').extract())
        a = response.body
        with open(self.path + '个人中心页面.html', 'wb') as f:
            f.write(a)






标签:cookiejar,python,self,爬虫,入门级,scrapy,meta,http,response
来源: https://blog.csdn.net/m0_46525584/article/details/121709304

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有