免费注册 查看新帖 |

Chinaunix

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

python中怎样从文本中识别链接? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-04 11:15 |只看该作者 |正序浏览
python中怎样从文本中识别链接?
用正泽表达式可以么

论坛徽章:
0
16 [报告]
发表于 2006-09-06 21:58 |只看该作者
因为html混合了标签中的链接和文本中的链接。而SGMLParser的方式只得出了标签中的链接。而我给出的正则式只处理了文本中的链接。所以你需要去掉所有的标签,再使用我提供的正则式进行处理。

论坛徽章:
0
15 [报告]
发表于 2006-09-06 10:34 |只看该作者
原帖由 limodou 于 2006-9-6 10:05 发表
html中的链接与它的文本是不同的东西。链接有规定的写法,而通过识别标签和属性就可以分析出来,而文本只能根据规则,处理不太一样。

而且你到底想要的是什么,是html标签中的链接,还是文本内容中的链接?

那么就是要html里的,但上面给出的方式,打印出的东西怎么没有我要的连接呢

论坛徽章:
0
14 [报告]
发表于 2006-09-06 10:05 |只看该作者
html中的链接与它的文本是不同的东西。链接有规定的写法,而通过识别标签和属性就可以分析出来,而文本只能根据规则,处理不太一样。

而且你到底想要的是什么,是html标签中的链接,还是文本内容中的链接?

论坛徽章:
0
13 [报告]
发表于 2006-09-06 08:34 |只看该作者
html不能当文本处理么?
SGMLParser我还看不懂

论坛徽章:
0
12 [报告]
发表于 2006-09-05 14:17 |只看该作者
因为你还是传入了一个html文件,而html文件中有许多的链接,但这些链接实际上是a标签的链接。我的意思是一个纯文本中有http://这样的链接形式的文本,然后取出来。如果你就是要处理a标签,那还是使用SGMLParser好了。如果是要处理html文件中的文本信息中的链接,那首先要将文本取出来,或将标签过滤掉再进行处理。

论坛徽章:
0
11 [报告]
发表于 2006-09-05 13:39 |只看该作者
原帖由 limodou 于 2006-9-5 11:56 发表
你不是说文本文件嘛,怎么改成html文件了?

上面SGMLParser的代码是把所有的<a href="xxx">中的xxx取出来。而我给的就是从文本中匹配链接取出来,处理方式不同,不知道你到底要什么样的。


文本也行啊,你给的方式我是这样用的,对么?
import urllib
import urllib2
import re

filename = ('c:/python24/my/old.txt')
url=raw_input("请输入 url 地址 : ")

proxyhost = 'http://14.0.189.69:808'
print url
if proxyhost:
        print "\nProxy is: %s" % proxyhost
        proxy=urllib2.ProxyHandler({'http':proxyhost})
        opener=urllib2.build_opener(proxy)
        urllib2.install_opener(opener)

if proxyhost:
        f=urllib2.urlopen(url)
else:
        f=urllib.urlopen(url)
print url

fw = file(filename, 'wb')
fw.write(f.read())
fw.close()
f.close()

f = open(filename,'r')
content = f.read()
f.close()

con = re.compile(r'\b(http|ftp)://(.*?)(\s|$)', re.I)
content1=con.findall(content)
print content1

论坛徽章:
0
10 [报告]
发表于 2006-09-05 11:56 |只看该作者
你不是说文本文件嘛,怎么改成html文件了?

上面SGMLParser的代码是把所有的<a href="xxx">中的xxx取出来。而我给的就是从文本中匹配链接取出来,处理方式不同,不知道你到底要什么样的。

论坛徽章:
0
9 [报告]
发表于 2006-09-05 10:24 |只看该作者
原帖由 limodou 于 2006-9-5 09:02 发表
不知道你是谁。


我用了你的方式,打印出一个列表
[('http', 'www.w3.org/TR/html4/loose.dtd">', '\n'), ('http', 'www.ziling.com/ad.htm"', ' '), ('http', 'bbs.ziling.com/"><img', ' '), ('http', 'www.ziling.com/img/zlbbs.gif"', ' '), ('http', 'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0"', ' '), ('http', 'www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"', ' '), ('http', 'bbs.ziling.com/"', ' '), ('http', 'bbs.ziling.com/</div></div>', '\n'), ('http', 'ac2.gameage.net/ad/ad_06090111.wmv"/><embed', ' '), ('http', 'activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"', ' '), ('http', 'ac2.gameage.net/ad/ad_06090111.wmv"', ' '), ('http', 'www.10203.com"', ' '), ('http', 'www.dvbbs.net/"', ' '), ('http', 'www.dvbbs.net/download.asp"', ' '), ('http', 'download.alexa.com/?p=TrafficDet_W_t_40_L1"', ' '), ('http', 'www.alexa.com/data/details/traffic_details?&y=t&q=&url=http://www.ziling.com"', ' '), ('http', 'www.ziling.com/ad.htm"', ' '), ('http', 'www.ziling.com/2005/1-14/20180659983.html"', ' '), ('http', 'www.ziling.com/2005/1-14/20303759425.html"', ' '), ('http', 'www.google-analytics.com/urchin.js"', ' ')]

好像不太对劲呀

论坛徽章:
0
8 [报告]
发表于 2006-09-05 10:22 |只看该作者
原帖由 yarshure 于 2006-9-5 09:47 发表
[code]
from sgmllib import SGMLParser

class URLLister(SGMLParser):
        def reset(self):
                SGMLParser.reset(self)
                self.urls = []

        def start_a(self, attrs):
                href = [v for k, v in attrs if ...


我按你方式用了一下,好像结果不太对
# -*- coding: cp936 -*-
import urllib
import urllib2

dress=raw_input("请输入 url 地址 : ")

proxyhost = 'http://14.0.189.69:808'
print dress
if proxyhost:
        print "\nProxy is: %s" % proxyhost
        proxy=urllib2.ProxyHandler({'http':proxyhost})
        opener=urllib2.build_opener(proxy)
        urllib2.install_opener(opener)

from sgmllib import SGMLParser

class URLLister(SGMLParser):
        def reset(self):
                SGMLParser.reset(self)
                self.urls = []

        def start_a(self, attrs):
                href = [v for k, v in attrs if k=='href']
                if href:
                        self.urls.extend(href)

if __name__ == "__main__":
        
        usock = urllib.urlopen(dress)
        parser = URLLister()
        parser.feed(usock.read())
        parser.close()
        usock.close()
        for url in parser.urls: print url


例如输入dress :http://www.ziling.com/bbs/dispbb ... D=475142&page=1

打印结果为
http://www.ziling.com/ad.htm
boardhelp.asp?boardID=26
http://bbs.ziling.com/
index.asp?boardid=35
index.asp?boardid=41
。。。。。。中间省略
how.asp?filetype=3&amp;boardid=26
show.asp?filetype=4&amp;boardid=26
show.asp
http://www.dvbbs.net/
http://www.dvbbs.net/download.asp

其中没有我最关心的带.wmv的链接啊?
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP