• 全部
  • 互动交流
  • 文章分享

求教: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>
...全文
604 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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)
回复
相关推荐
发帖
脚本语言
创建于2007-08-27

3.7w+

社区成员

JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
申请成为版主
帖子事件
创建了帖子
2010-06-02 10:21
社区公告

CSDN 脚本语言社区接受专栏投稿(专栏会在顶部创建专属你的栏目),投稿需满足以下要求:

  • 脚本语言技术相关;
  • 文章持续更新,保持活跃;
  • 内容清晰明了,干货为主;
  • 文章排版有序,有条有理。

本社区开通招聘专栏,发布招聘信息请联系版主,发布者需要保证招聘信息真实有效,CSDN 平台和版主不对招聘内容负责!

联系方式:私聊版主、发送邮件、QQ联系等均可: