七.|七. 模拟登陆webscraping.com网站
【七.|七. 模拟登陆webscraping.com网站】爬取网址:http://example.webscraping.com
文章图片
image.png 1.观察登陆时的信息
登陆后可以看到右上方的变化,出现了“欢迎Liu”,同时也可以在分析工具中看到有一个post的“method”。如果在chrome中没有显示“method”,可以在栏目中点击右键添加“method”属性。
文章图片
image.png 选择这个表单数据,然后在Headers的最下方找到Form Data。
文章图片
image.png 另外看回Headers的头部信息,由于Status code为303,表示页面重定向,此时浏览器会读取Response Headers中的Location字段,并根据此路径再次发送一个GET请求。
文章图片
image.png 登陆后可以看到Headers中的Cookie字段,并看到右上方“欢迎Liu”的字样。
文章图片
image.png 2.使用FormRequest进行模拟登陆
① 通过scrapy shell 进行调试:
scrapy shell http://example.webscraping.com/places/default/user/login
② 然后想办法获取表单字段信息:email,password,_formkey,_formname,_next(均为input标签中的name属性)。其中后三个字段信息是隐藏的,我们可以通过查找form元素,然后在Properties中找到这几个字段信息。
文章图片
image.png ③ 可以按照下述方式获取到隐藏的form_data,然后再将账户和密码信息添加进字典即可。
from scrapy.http import FormRequestform_hinfos = response.xpath('//input[@type="hidden"]')
form_name = form_hinfos.xpath('@name').extract()
form_value = https://www.it610.com/article/form_hinfos.xpath('@value').extract()
form_data = https://www.it610.com/article/dict(zip(form_name,form_value))
form_data['email'] = 'liushuo@webscraping.com'
form_data['password'] = '12345678'request = FormRequest('http://example.webscraping.com/places/default/user/login',formdata=https://www.it610.com/article/form_data)
文章图片
image.png
文章图片
image.png ④ 当然,也可以不用捕捉隐藏的input,使用FormRequest的from_response方法即可。使用from_response方法时,需要传入一个Response对象作为第一个参数,然后from_response方法会自动解析Response对象中的