python3爬虫session处理用户名密码动态名称登录后抓取信息

一、 本文实现需求
1、 登录用户名与密码的名称是动态的,动态爬取
2、 登录页面还有一些其他特征信息,动态爬取
3、 登录后,爬取页面任意数据
二、 登录原理
1、 相关处理技术
a) 采用requests的session进行get/post操作
b) 采用bs4分析页面数据
2、 页面抓取流程
通过chrome,打开登录页面,f12打开调试,network测试页面登录信息
第一步:取得登录页面信息
第二步:真正登录
第三步:爬取登录后的页面信息

三、 全部源代码如下

# -*- coding: utf-8 -*-
"""
2018-06-14 10:39:44
作者:刘明
"""

import requests
from bs4 import BeautifulSoup

#第一步:取得用户名与密码的动态名称,名称是动态的,及其他动态登录信息
url = "http://www.v2ex.com/signin"

headers = { "User-Agent" : 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.13 Safari/537.36',
           "Referer": "http://www.v2ex.com/signin"
           }
session=requests.session()

response=session.get(url,headers=headers)
html=response.content
soup=BeautifulSoup(html,'html.parser') 
s1=str(soup)#观测登录页面,需要取得那些信息
username=input('请输入用户名:')
password=input('请输入用密码:')
#用户名与密码的动态名称
usernamecode=soup.find('input',{'placeholder':'用户名或电子邮箱地址'})['name']#每次可能不相同,本次是:2c014ff2140fe6171682d56a2228428f167195488a1d652cf5c6d18a0360a5d6
passwordcode=soup.find('input',{'type':'password'})['name']#本次结果是:2c014ff2140fe6171682d56a2228428f167195488a1d652cf5c6d18a0360a5d6
once=soup.find('input',{'name':'once'})['value']
next=soup.find('input',{'name':'next'})['value']
postData={
          usernamecode:username,
          passwordcode:password,
          'once':once,
          'next':next

          }
#第2步:真正提交
response=session.post(url,postData,headers)
status=response.status_code #得到结果:200,表明登录成功

#第3步:依据session进入任何想进入的页面
response = session.get('https://www.v2ex.com/settings',headers=headers) #OK
resonse = session.get('https://v2ex.com/mission/daily',headers=headers) #OK
resonse = session.post('https://v2ex.com/mission/daily',headers=headers) #OK
resonse = session.get('https://www.v2ex.com/member/'+username,headers=headers) #OK  

page=response.content.decode('utf-8') #汉字无乱码

#如果取得的page是json数据,则采用下面方法转换,如果不是json,则转换异常为:JSONDecodeError
import json
data=json.loads(page)

created by 刘明
www.isscollege.com

你可能感兴趣的:(python-爬虫实战,python)