网页源代码抓取工具(模拟登录的实现过程1、获取所需要的参数IE浏览器)
优采云 发布时间: 2021-09-21 18:00网页源代码抓取工具(模拟登录的实现过程1、获取所需要的参数IE浏览器)
模拟登录原理
通常,当用户通过浏览器登录网站时,他们会在特定的登录界面中输入个人登录信息,然后在提交后返回收录数据的网页。在浏览器级别,浏览器提交收录必要信息的HTTP请求,服务器返回HTTP响应。HTTP请求包括以下5项:
Url=基本Url+可选查询字符串
请求头:必需或可选
Cookie:可选
Post数据:当时Post方法需要
HTTP响应的内容包括以下两项:HTML源代码或图像、JSON字符串等
Cookies:如果后续访问需要Cookies,则返回的内容将收录Cookies
URL是统一资源定位器(UniformResourceLocator)的缩写,它是Internet上可用资源的位置和访问方法的简明表示,包括主机部分和文件路径部分;请求头是服务请求信息的头信息,包括编码格式、用户代理、提交主机、路径等信息;Post数据是指提交的用户、内容、格式参数等。Cookie是服务器发送到浏览器的文件,存储在本地,服务器用于识别用户,用于判断用户是否合法以及一些登录信息
网页捕获原理
如上所述,在模拟登录之后,网站server将返回HTML文件。Html是一个带有标记的文本文件,具有严格的语法和格式。不同的标签有不同的内容。根据相关标记和数据特征,可以使用正则表达式获取所需的数据或表示可进一步挖掘的数据的链接
模拟登录的实现过程
1、获取所需参数。IE浏览器为开发者提供了一个强大的工具。获取参数的过程如下:
打开浏览器
输入网址
开发工具
网络使能
网络流量捕获
输入要登录的密码和帐户
查找发起程序为“单击”的第一条记录
细节
请求头和请求体
请求头和请求体收录客户端和浏览器之间交互的参数。其中一些参数是默认的,不需要设置;有些参数与用户本身有关,如用户名、密码、记住密码等
一些参数是通过客户端和服务器之间的交互生成的。确定参数的步骤如下:首先,逐字理解它们,然后在交互记录中搜索参数名称并观察参数生成的过程。请求正文中的一些参数已编码,需要解码
2、获取登录百度账号所需的参数
按照以上步骤,使用IE9浏览器内置工具,轻松获取相关参数。其中,staticpage是跳转页。在解码或学习之后。“摘要”记录中的HTML。搜索发现token参数首先出现在带有URL的响应体中,需要在返回的页码中抓取;apiver参数设置返回的文本是JSON格式还是HTML格式。除了常规设置参数外,请求头中还有cookie。为了与服务器交互,需要在登录期间获取Cookies
3、login特定代码实现
3.1导入登录过程使用的库
*敏*感*词*稀土
mport cookielib
导入urllib
导入urllib2
re库用于解析正则表达式并获取和匹配它们;cookie库获取并管理cookie;urllib和urllib 2库根据URL和post数据参数从服务器请求和解码数据
3.2Cookie检测函数
通过检测cookie jar返回的cookie密钥是否与cookie名称列表完全匹配,确定登录是否成功
def checkAllCookiesExist(cookieNameList,cookieJar):
cookiesDict={}
对于cookieNameList中的每个CookieName:
cookiesDict[eachCookieName]=False
allCookieFound=True
对于cookieJar中的cookie:
如果(cookiesDict.keys()中的cookie.name):
cookiesDict[cookie.name]=True
对于cookiesDict.keys()中的Cookie:
如果(不是cookiesDict[eachCookie]):
allCookieFound=False
中断
返回找到的所有CookieFind
3.3模拟登录百度
def emulatoroginbaidu():
cj=cookielib.CookieJar()
opener=url� lib2.build_uuu-opener(urllib2.HTTPCookieProcessor(cj))
urllib2.安装开启器(开启器)
创建cookie jar对象以保存cookie,使用HTTP处理器绑定并打开安装
打印“[step1]以获取cookie BAIDUID”
baiduMainUrl=“”
响应=urllib2.urlopen(baiduMainUrl)
打开百度主页,获取cookie baiduid
打印“[step2]以获取令牌值”
getapiUrl=“;class=login&;tpl=mn&;tangram=true”
getapiResp=urllib2.urlopen(getapirl)
getapiRespHtml=getapiResp.read()
打印“getapiResp=”,getapiResp
IsfoundToken=re.search(“bdPass\.api\.params\.login_token=”(?p\w+);”
getapiRespHtml)
上述程序用于获取post数据中的令牌参数。首先,获取getapiurl web地址的HTML,然后使用re-standard库中的搜索函数搜索匹配项,并返回一个布尔值,指示匹配是否成功
如果(IsfoundToken):
tokenVal=IsfoundToken.group(“tokenVal”)
打印“tokenVal=”,tokenVal
打印“[step3]模拟登录百度”
staticpage=“”
baiduMainLoginUrl=“”
后记={
“字符集”:“utf-8”
“token”:tokenVal
“isPhone”:“false”
'索引':“0”
“safeflg”:“0”
“staticpage”:staticpage
'登录类型':“1”
“tpl”:“mn”
“用户名”:“用户名”
“密码”:“密码”
“mem_pass”:“on”
}[3] )
设置postData参数值时,并非所有参数都需要设置。某些参数是默认值
postData=urllib.urlencode(postDict)
对postData进行编码。例如,编码结果是HTTP%3A%2F%2F%2fcache%2fuser%2fhtml%2fjump.html。其他参数类似
请求=urllib2.Request(baiduMainLoginUrl,post)�数据)
响应=urllib2.urlopen(req)
python标准库urlib2的两个函数分别提交用户请求和数据,并接受返回的数据
cookiesToCheck=['BDUSS','PTOKEN','STOKEN','SAVEUSERID','UBI','HISTORY','USERNAMETYPE']
网页抓取的实现过程
在上面的例子中,正则表达式用于成功地获取返回网页中的令牌。Python的标准库HTMLPasser提供了识别HTML文本标记和数据的强大功能。使用时,从Htmlparser派生新类,然后重新定义这些类以处理u开始时的函数包括:
句柄\uuStartEndTag句柄开始和结束标记
handle_uuStartTag处理开始标记,例如
handle_uuEndTag处理结束标记,例如
handle_uCharRef处理特殊字符串,这些字符串是以开头的字符,通常由内部代码表示
handle_uuentityref将一些特殊字符处理为&;例如,在开始的时候
数据处理数据是数据
中的数据。
以下程序用于捕获*敏*感*词*电影条帖子的标题作为演示:
导入HTMLPasser
导入urllib2