问题: 网页爬虫动态部分的解决
解决方式:
# urllib和urllib2的区别
Python的urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能。他们两个最显着的差异如下:
urllib2可以接受一个Request对象,并以此可以来设置一个URL的headers,但是urllib只接收一个URL。这意味着,你不能伪装你的用户代理字符串等。
urllib模块可以提供进行urlencode的方法,该方法用于GET查询字符串的生成,urllib2的不具有这样的功能。这就是urllib与urllib2经常在一起使用的原因。
# cookie容器构建的url打开
#创建一个cj的cookie的容器
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
html = opener.open(url).read() #使用有cookie容器的opener打开登录连接
#cas登录内容的特殊处理
#-----------------------JSESSIONID--------------------------
#此部分为打开地址的本地JSESSIONID在 cookie中保存的内容
reg_sid=r'(?<=JSESSIONID=).{32}'
JSESSIONID=re.findall(reg_sid,str(cj))[0]
print "JSESSIONID is %s" % JSESSIONID
#-----------------------lt--------------------------
#此部分为登录是使用到cas的lt内容,在返回页面的body中查找
reg_r=r'(?<="lt" value=").*"'
t_res=re.findall(reg_r,html)[0]
reg_r=r'.*(?=")'
lt=re.findall(reg_r,t_res)[0]
print lt
#POST方式
values = {'lt' : lt , 'execution' : 'e1s1','_eventId' : 'submit','username':'gonglixun','password':'123456789','vcode':'1688','submit':'' } #登录POST使用数据
#将要POST出去的数据进行编码
data = urllib.urlencode(values) #提供数据缓存的application/x-www-form-urlencoded格式
req = urllib2.Request(url,data) #构建Request对象
response = opener.open(req)
参考地址:
http://www.cnblogs.com/wly923/archive/2013/05/07/3057122.html
http://blog.csdn.net/pleasecallmewhy/article/details/9305229
解决方式:
# urllib和urllib2的区别
Python的urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能。他们两个最显着的差异如下:
urllib2可以接受一个Request对象,并以此可以来设置一个URL的headers,但是urllib只接收一个URL。这意味着,你不能伪装你的用户代理字符串等。
urllib模块可以提供进行urlencode的方法,该方法用于GET查询字符串的生成,urllib2的不具有这样的功能。这就是urllib与urllib2经常在一起使用的原因。
# cookie容器构建的url打开
#创建一个cj的cookie的容器
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
html = opener.open(url).read() #使用有cookie容器的opener打开登录连接
#cas登录内容的特殊处理
#-----------------------JSESSIONID--------------------------
#此部分为打开地址的本地JSESSIONID在 cookie中保存的内容
reg_sid=r'(?<=JSESSIONID=).{32}'
JSESSIONID=re.findall(reg_sid,str(cj))[0]
print "JSESSIONID is %s" % JSESSIONID
#-----------------------lt--------------------------
#此部分为登录是使用到cas的lt内容,在返回页面的body中查找
reg_r=r'(?<="lt" value=").*"'
t_res=re.findall(reg_r,html)[0]
reg_r=r'.*(?=")'
lt=re.findall(reg_r,t_res)[0]
print lt
#POST方式
values = {'lt' : lt , 'execution' : 'e1s1','_eventId' : 'submit','username':'gonglixun','password':'123456789','vcode':'1688','submit':'' } #登录POST使用数据
#将要POST出去的数据进行编码
data = urllib.urlencode(values) #提供数据缓存的application/x-www-form-urlencoded格式
req = urllib2.Request(url,data) #构建Request对象
response = opener.open(req)
参考地址:
http://www.cnblogs.com/wly923/archive/2013/05/07/3057122.html
http://blog.csdn.net/pleasecallmewhy/article/details/9305229
没有评论:
发表评论