免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6390 | 回复: 14
打印 上一主题 下一主题

利用python登录wap网站 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-31 17:36 |只看该作者 |倒序浏览
之前发过一个帖子,关于开心网的,不知道是不是被当作广告了,帖子被删除了,我重新发一个吧,请各位帮忙看看下一步怎么进行。

先说说目前实现到什么了:目前可以登录wap开心网的首页,并且解析html文件后,可以把所有的超链接都提取出来。

需要解决的问题,我想访问里面特定的某个超链接,比如“组件”这个超链接,我该怎么提取这个超链接呢?

urllister.py
  1. from sgmllib import SGMLParser

  2. class URLLister(SGMLParser):
  3.     def reset(self):
  4.         SGMLParser.reset(self)
  5.         self.urls = []

  6.     def start_a(self, attrs):
  7.         href = [v for k, v in attrs if k == 'href']
  8.         if href:
  9.             self.urls.extend(href)
复制代码
kaixin001.py
  1. # -*- coding: utf-8 -*-
  2. #File name kaixin001.py

  3. import urllib
  4. import urllib2
  5. import httplib
  6. import cookielib
  7. import urllister

  8. def login(url, params):
  9.     try:
  10.         params = urllib.urlencode(params)
  11.         request = urllib2.Request(url, params)
  12.         response = urllib2.urlopen(request)
  13.         return response.read()
  14.     except:
  15.         return False

  16. def getpage(url):
  17.     try:
  18.         request = urllib2.Request(url)
  19.         response = urllib2.urlopen(request)
  20.         return response.read()
  21.     except:
  22.         return False

  23. if __name__ == '__main__':
  24.    
  25.     print '正在登录...'.decode('utf-8')
  26.     url = 'http://wap.kaixin001.com/home/'
  27.     params = {"email":"aaa@bbb.cn","password":"123456","from":"","refuid":"0","refcode":"","bind":"","gotourl":"","login":"登录"}

  28.     html = login(url, params)
  29.     parser = urllister.URLLister()
  30.     parser.feed(html)
  31.     for url in parser.urls: print url
复制代码

论坛徽章:
0
2 [报告]
发表于 2010-05-31 17:43 |只看该作者
之前发过一个帖子,关于开心网的,不知道是不是被当作广告了,帖子被删除了,我重新发一个吧,请各位帮忙看 ...
chinaunix874 发表于 2010-05-31 17:36



    要是他是通过ajax取的数据我感觉没发取吧,你能得到他请求ajax页面的请求url么?

论坛徽章:
0
3 [报告]
发表于 2010-05-31 17:47 |只看该作者
要是他是通过ajax取的数据我感觉没发取吧,你能得到他请求ajax页面的请求url么?
t6760915 发表于 2010-05-31 17:43



我试过login之后把页面保存成文件,然后看页面源文件,把超链接取出来之后,再用urlopen,是可以继续打开下一级页面的。所以应该不是ajax的页面请求吧?wap是手机上用的,大概没那么复杂。

我看了整个页面内容,除了首页login的时候需要post数据,其余页面基本上全部是超链接形式了。

论坛徽章:
0
4 [报告]
发表于 2010-05-31 18:01 |只看该作者
那你现在需要把符合组件那个特征的url提取出来,带上cookie,get一下就可以了吧,你写的方法里面没有带cookie

论坛徽章:
0
5 [报告]
发表于 2010-05-31 18:28 |只看该作者
那你现在需要把符合组件那个特征的url提取出来,带上cookie,get一下就可以了吧,你写的方法里面没有带cookie
t6760915 发表于 2010-05-31 18:01


带不带cookie都没问题,我试过。不过cookie该怎么操作?

另外,我现在的问题就是,怎么提取符合“组件”的这个url?
我前面的代码,基本上都是东拼西凑的,现在print出来的,是所有的超链接,也不知道哪个是“组件”了。

是不是应该先用正则表达式查找一下“组件”,然后再想办法用html的分析工具分析?能不能帮忙再给个示例?

论坛徽章:
0
6 [报告]
发表于 2010-05-31 21:21 |只看该作者
带不带cookie都没问题,我试过。不过cookie该怎么操作?

另外,我现在的问题就是,怎么提取符合“组 ...
chinaunix874 发表于 2010-05-31 18:28



    你得看html的代码,找到你需要的那个url啊,我不是说按特征提取吗,比如这个url是http://www.baidu.com/gcc/c0001.html
那你就用a.startswith('http://www.baidu.com/gcc/c0001')这些东西提取或者用正则啊,你总知道你要抓的url吧

论坛徽章:
0
7 [报告]
发表于 2010-06-01 09:04 |只看该作者
你得看html的代码,找到你需要的那个url啊,我不是说按特征提取吗,比如这个url是
那你就用a.start ...
t6760915 发表于 2010-05-31 21:21


就是不知道url是什么才要提取啊。

比如得到的页面类似如下:

<a href="/app/mylist.php?verify=38985495_38985495_1275354092_c82d5047834279b954adcbfa3ff3694d_kx>组件</a>

当然,还会有其他很多类似的超链接。
我现在就想做到能够从组件这个标签里把超链接提取出来,应该怎么办呢?比如我用正则表达式是能够匹配到“组件”两个字,可是怎么去处理对应组件的html标签呢?

论坛徽章:
0
8 [报告]
发表于 2010-06-01 10:27 |只看该作者
就是不知道url是什么才要提取啊。

比如得到的页面类似如下:
chinaunix874 发表于 2010-06-01 09:04
  1. #coding=utf-8

  2. import re

  3. html = '<a href="/app/mylist.php?verify=38985495_38985495_1275354092_c82d5047834279b954adcbfa3ff3694d_kx>组件</a>'

  4. mylist = re.compile('<a href="(.*?)>(.*?)</a>', re.DOTALL).findall(html)

  5. for key,val in mylist:
  6.     key = key.decode('utf-8', 'ignore').encode('gbk', 'ignore')
  7.     val = val.decode('utf-8', 'ignore').encode('gbk', 'ignore')

  8.     print key
  9.     print val
复制代码

论坛徽章:
0
9 [报告]
发表于 2010-06-01 11:14 |只看该作者
多谢t6760915

现在问题就是,每次登录后,获得的超链接是不同的,比如我重新登录一次,组件就变成下面这个样子了:


<a href="/app/mylist.php?verify=38985495_38985495_1275361701_817fbc84e1c61d4ab36cf91b4719edbf_kx">组件</a>

我现在想的是,能不能给定一个关键字,然后用python提取出对应的url,比如函数格式如下:

def geturl(html, keyword):
从给定的html文件中,查找对应keyword的超链接标签,并且提取出来。

论坛徽章:
0
10 [报告]
发表于 2010-06-01 11:37 |只看该作者
多谢t6760915

现在问题就是,每次登录后,获得的超链接是不同的,比如我重新登录一次,组件就变成下面这 ...
chinaunix874 发表于 2010-06-01 11:14
  1. def .....:
  2.     for key,val in mylist:
  3.         if val == '组件':
  4.             return key

  5.     return False
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP