https://scrapingclub.com/exercise/basic_captcha/

    def parse(self, response):
        # set_cookies = response.headers.getlist("set-cookie").decode("utf-8")

        pattern1 = re.compile('csrftoken=(.*?);')
        pattern2 = re.compile('cfduid=(.*?);')
        csrftoken = pattern1.findall(response.headers.getlist("set-cookie")[1].decode("utf-8"))[0]
        cfduid = pattern2.findall(response.headers.getlist("set-cookie")[0].decode("utf-8"))[0]


        captcha_0= response.css('div input[name*=captcha_0]::attr(value)').get()
        captcha_1_url= 'https://scrapingclub.com'+str(response.xpath('//div/img/@src').extract()[0])
        print(captcha_1_url)
        captcha_1= input("check captcha  then input\n")
        cookie = {
            '__cfduid': cfduid,
            'csrftoken': csrftoken,
            # '_ga': 'GA1.2.2039087667.1551428649',
            # '_gid': 'GA1.2.222080927.1551428649',

            # 'gat_gtag_UA_39890589_8': 1,
        }
        return scrapy.FormRequest('https://scrapingclub.com/exercise/basic_captcha/',cookies=cookie, headers=header, callback=self.parse_login,
            formdata={
            'name':'scrapingclub',
            'password':'scrapingclub',
            'csrfmiddlewaretoken':response.css("form input::attr(value)").get(),
            'captcha_0':captcha_0,
            'captcha_1':captcha_1,
        }
        )

这次练习的过程中遇到了很多坑,大坑第一条:因为我每次都是在以前建好的project上直接修改请求地址,修改了starturl后没有修改Formrequest的导致一直获取不到验证码的地址,在scrapy shell试过很多次之后不明白为什么,后来换成xpath,xpath用的少,语法不熟悉又重新查看语法还是不知道为什么,最后突然发现没有改formrequest的url。。。

大坑第二条:一直在纠结 '_ga'和'_gid'这两个东西要不要构造。。。cookie里有,后来搜了下 '_ga'的4段内容分别包含的是什么,最后也没管它,

大坑第三条:'csrfmiddlewaretoken'不知道为什么变成了'csrfmiddleware token'中间多了个空格。。。。。。。。。。试了好几次感觉代码逻辑并没错重新看代码发现了这个问题

大坑第四条:其实刚开始不知道自己是什么分析set cookies的,下次做的时候应该:

1:先空表格网页请求一遍,看response header set cookie设置的是什么值,构造cookie就把set的值放就去就好了

2:输入name密码再请求一遍,看request form data发送了什么值,在构造form request的时候把发送的所有值放进去就好了

上一篇:虚拟机配置centos7.5 nat网络


下一篇:SNAT实验