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

2021/12/4 1:16:33

本文主要是介绍模拟登陆(入门级认知)_python爬虫,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

“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)








这篇关于模拟登陆(入门级认知)_python爬虫的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程