求教:python提取页面中指定的url

baidu874 2010-06-02 10:21:54
比如我用urllib2打开百度的首页,类似如下代码:

import urllib2
url = 'http://www.baidu.com'
request = urllib2.Request(url)
response = urllib2.urlopen(request)
page = response.read()

这样我就获得了百度的首页,现在如果我想提取里面指定的某个超链接的url,比如想提取“京ICP证030173号”对应的超链接,有什么好办法呢?

从页面源代码来看,这个超链接里还有一些属性标记,如何做到只提取超链接,并且去掉没用的属性标记呢?
<a href="http://www.miibeian.gov.cn" target="_blank">京ICP证030173号</a>
...全文
654 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu874 2010-06-04
  • 打赏
  • 举报
回复
多谢8楼的兄弟,获取全部URL我有办法了,但是现在需求是要获取特定的URL,比如页面中有很多超链接,我只想获得其中特定的一个,还用baidu做例子,我打开baidu首页后,就想获得“京ICP证030173号”对应的超链接。

不过我现在大体上有一个思路了,还是用sgmllib来解决。重写里面的方法,大概需要重写handle_data和start_a,基本思路就是先在handle_data里找到对应的数据,然后设置一个标志,在start_a里,这个标志为真了,就取出对应的url,不过暂时只是思路,还没有特别想明白。
baidu874 2010-06-03
  • 打赏
  • 举报
回复
其实我是想在手机上用,所以想尽量不要用第三方的库。(ps。其实也完全不会用)

shiboss 2010-06-03
  • 打赏
  • 举报
回复
下面是一个提取指定网页中的所有链接网页

#! /usr/bin/env python
#coding=utf-8
from sgmllib import SGMLParser
import urllib,re

class UrlList(SGMLParser):
def reset(self):
self.urls=[]
SGMLParser.reset(self)
def start_a(self,attrs):
href=[v for k,v in attrs if k=='href']
if href:
self.urls.extend(href)
def getUrls(url):
try:
usock=urllib.urlopen(url)
except:
print "get url except"+url
return []
result=[]
parser=UrlList()
parser.feed(usock.read())
usock.close()
parser.close()
urls=parser.urls
for url in urls:
if len(re.findall(r'^http://',url))>0: #指定正则表达式
result.append(url)
return result

def spider(startURL,depth):
f=open("D:\\url.txt","w")
if depth<0:
return
else:
urls=getUrls(startURL)
for url in urls:
spider(url,depth-1)
f.write(url+"\n")

if __name__=="__main__":
spider("http://www.pcuseman.com/?p=102",0) #指定需处理网页
notax 2010-06-02
  • 打赏
  • 举报
回复
倒很少听说BeautifulSoup复杂,一般不用他的原因,是嫌他比较慢 (对比 HTMLParser)
baidu874 2010-06-02
  • 打赏
  • 举报
回复
用BeautifulSoup太复杂了吧?
能不能有什么方法,从网页中只提取出<a.......>xxx</a>这样的片段?然后再用sgmllib处理一下就行了,这样似乎比较简单。
thy38 2010-06-02
  • 打赏
  • 举报
回复
要想普适,用BeautifulSoup吧
baidu874 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 amu9900 的回复:]

Python code

import urllib2
url = 'http://www.baidu.com'
request = urllib2.Request(url)
response = urllib2.urlopen(request)
page = response.read()
import re
rc = '<a href="(\S*?)" target="_blank">京I……
[/Quote]

多谢1楼的兄弟,可是这个不具有通用性,如果要提取的url里没有target怎么办?或者是一个其他的属性怎么办?
dragon9633 2010-06-02
  • 打赏
  • 举报
回复
用re吧.正则表达式..

我截取url用作文件名时本来想用的..可是老大说让我自己琢磨,我只好找简单的..
amu9900 2010-06-02
  • 打赏
  • 举报
回复

import urllib2
url = 'http://www.baidu.com'
request = urllib2.Request(url)
response = urllib2.urlopen(request)
page = response.read()
import re
rc = '<a href="(\S*?)" target="_blank">京ICP证030173号</a>'
re.findall(rc,page)

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧