爬虫框架Scrapy(四):Scrapy中的模拟登陆

Scrapy中的模拟登陆

1.携带cookie登陆人人网

比如我们要登陆我们的人人网站,想获取我们的自己的用户名,只有自己登陆进去才可以显示出我们的用户名:死性不改

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xCWtxn8q-1596981775104)(C:\Users\qinfan\AppData\Roaming\Typora\typora-user-images\1596979373728.png)]

因此我们需要现在浏览器端登陆进去,然后获取到自己的cookie,然后开始写scrapy爬虫

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kV5GOfb8-1596981775105)(C:\Users\qinfan\AppData\Roaming\Typora\typora-user-images\1596979496059.png)]

import scrapy
import re


class RenrenSpider(scrapy.Spider):
    name = 'renren'
    allowed_domains = ['']

    def start_requests(self):
        url = 'http://www.renren.com/9090xxxxxx'
        cookies = '字符串',
        cookies = {
    
    i.split("=")[0]: i.split("=")[1] for i in cookies.split('; ')}

        yield scrapy.Request(url, callback=self.parse,cookies=cookies)

    def parse(self, response):
        print(re.findall('死性不改', response.body.decode()))

运行爬虫

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HUmGiFYj-1596981775107)(C:\Users\qinfan\AppData\Roaming\Typora\typora-user-images\1596979554277.png)]

2.使用session对github进行模拟登陆

访问页面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-87b1TW7R-1596981775108)(C:\Users\qinfan\AppData\Roaming\Typora\typora-user-images\1596981098983.png)]

一个输入账户一个输入密码,两个框分别对应的name

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-enYaa01Z-1596981775109)(C:\Users\qinfan\AppData\Roaming\Typora\typora-user-images\1596981160211.png)]

写爬虫代码

import scrapy
import re


class GithubSpider(scrapy.Spider):
    name = 'github'
    allowed_domains = []
    start_urls = ['https://github.com/login']

    def parse(self, response):
        yield scrapy.FormRequest.from_response(
            response,
            formdata={
    
    "login": '账号', 'password': '密码'},
            callback=self.after_login
        )

    def after_login(self, response):
 		# 当登陆进来,会显示登陆后的信息,这里的信息为qinfan0412
        print(re.findall('qinfan0412', response.body.decode()))

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pzL5zfiG-1596981775110)(C:\Users\qinfan\AppData\Roaming\Typora\typora-user-images\1596981244599.png)]

注意:scrapy.FormRequest.from_response

  • FormRequest是post提交表单的方法
  • from_response方法可以自动寻找表单中填写完要跳转的位置action,当一个页面有多个表单,如何寻找是哪个表单呢?进入源码,可以通过以下属性确定是哪个表单

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z1qqTShA-1596981775111)(C:\Users\qinfan\AppData\Roaming\Typora\typora-user-images\1596981379555.png)]

  • 使用FormRequest.from_response方法的好处是可以自动寻找提交的页面

猜你喜欢

转载自blog.csdn.net/qq_40558166/article/details/107901245
今日推荐