scrapy框架登陆GitHub

踩点

在这里插入图片描述
这是我们需要发送的表单数据,如果时正常来写,就需要去源代码去找 authenticity_token等对应的值,,,,,

但是再scrapy中,把相关的配置搞好,然后写spider

import scrapy

class GithubSpiderSpider(scrapy.Spider):
    name = 'github_spider'
    allowed_domains = ['github.com']
    start_urls = ['http://github.com/login'] # 以登录界面开始

    def parse(self, response):
        yield scrapy.FormRequest.from_response(response,formdata={
            'login':'账号',
            'password':'密码'
        },callback=self.after_login) # 可以自动填充并将网页的form表单发送过去,哇,只要把我们需要填的加上就好

    def after_login(self,response):
        yield scrapy.Request('https://github.com/settings/profile',callback=self.visit_profile) # 发送get 请求

    def visit_profile(self,response):
        with open('github_profile.html','w',encoding='utf-8') as f:  # 证明我们登录成功了
            f.write(response.text)

然后就没了,,,,,,,,,,,,,,scrapy nb!!!

但是里面还是有些小知识的。。。:

  1. 回调函数:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。。。感觉就跟函数做参数一样把

百科的一句话笑死我了。。回调方法是任何一个被以该回调方法为其第一个参数的其它方法调用的方法。啥啥啥方法。。

借用一下大佬的例子: 脑补连接

你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。

在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做 触发回调事件,店员给你打电话叫做 调用回调函数,你到店里去取货叫做 响应回调事件。

  1. cookie的处理,在登陆成功后,进行get 请求来获得个人界面,在普通的爬虫中,要想保存cookie信息还是要使用session对象的,但是在scrapy里,cookie信息是默认保存的,如果你想关掉,在settings里
# Disable cookies (enabled by default)       # 是否跟踪cookie,默认时开启的
COOKIES_ENABLED = False
  1. 过滤掉不成功的(错误的)HTTP响应。根据HTTP标准,成功响应是状态代码在200-300范围内的响应。
    如果仍要处理该范围之外的响应代码,在settings文件里填上 HTTPERROR_ALLOWED_CODES

如果你把cookie关闭了,在运行上面那个代码,这就会得不到github_profile.html这个文件,查看原因是因为响应码是422,就是那个get请求没有cookie信息,于是scrapy 就自动忽略了,然后就不进行下去了。。但是我就是想搞出一个文件来,,,(没有登录成功的话会302 重定向到登录界面的源代码),然后就可以再settings中加上

HTTPERROR_ALLOWED_CODES=[422]   # 传递此列表中包含非200状态代码的所有响应

这就会使scrapy 即使遇到了422,也不会自动忽略,而是让代码继续运行下去。HTTPERROR_ALLOW_ALL默认false,识别所有响应。但是人家好像不建议使用这些东西。。

Keep in mind, however, that it’s usually a bad idea to handle non-200 responses, unless you really know what you’re doing.# 除非你真正知道你在干嘛,不然别闲的去处理非200的请求

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值