python 如何获取一个网址的标题??

2014-04-18 11:45:02 +08:00
 hao1032
1.网上有类似的服务吗?
给一个网址如www.baidu.com,返回网页的标题 百度一下

2.有能满足这个需求的源码吗?
因为什么样的网站都有自己写还要处理编码什么的。
9790 次点击
所在节点    Python
24 条回复
nervouna
2014-04-18 11:56:41 +08:00
你确定你只要 title?这算是抓取网页里最简单的一件事了吧……
Google Beautiful Soup
ericls
2014-04-18 12:20:34 +08:00
手机打一个
from pyquery import PyQuery as pq

d=py(url)
d('title').text

不知道对不对
fay
2014-04-18 12:27:19 +08:00
我在开发自己的莲蓬网的时候,需要获取网页标题等信息,顺手抽离了这部分的代码: https://github.com/fay/pagemeta
tonghuashuai
2014-04-18 13:06:42 +08:00
1 #!/usr/bin/env python
2 #coding:utf-8
3
4 import urllib
5 import re
6
7
8 def get_title(url):
9 title = ''
10 c = urllib.urlopen(url)
11 html = c.read()
12
13 p = '<title>.*?</title>'
14 target = re.findall(p, html)
15
16 if target:
17 title = target[0]
18
19 return title
20
21 if __name__ == '__main__':
22 url = 'http://www.baidu.com'
23 title = get_title(url)
24 print title

简单实现,没加异常处理
tonghuashuai
2014-04-18 13:07:01 +08:00
行号杯具了
davidli
2014-04-18 15:07:28 +08:00
楼上正解

网站的标题应该都是在<title></title>里吧。
yhf
2014-04-18 15:24:56 +08:00
BeautifulSoup 随便哪个节点由你抓
lifemaxer
2014-04-18 15:31:30 +08:00
以当前页为例,
soup = BeautifulSoup(content) #content为当前页数据
a = soup.find_all('title')[0].get_text()
hao1032
2014-04-18 16:23:58 +08:00
@tonghuashuai
这个在实际应用中会出错的,获取的title编码不知道是什么,还要获取网页里面的charset,然后解码。

@lifemaxer 这个我试试看看会不会出现乱码的问题。
hao1032
2014-04-18 16:28:04 +08:00
@tonghuashuai
这个在实际应用中会出错的,获取的title编码不知道是什么,还要获取网页里面的charset,然后解码。
更恶心的是网页中写的charset又不一定是正确的(就遇到过这样的奇葩网站),然后用charset去解又会出错。
Crossin
2014-04-18 17:14:10 +08:00
@hao1032 那就用chardet判断一下编码
lm902
2014-04-19 10:03:58 +08:00
text.split("<title>")[1].split("</title>")[0]
kehr
2014-04-20 10:00:38 +08:00
刚做了网页抓取。推荐BeautifulSoup无压力。

文档: http://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
hao1032
2014-05-24 23:04:32 +08:00
@kehr 使用bs4,用的就是你发到链接里面的例子。
soup.title.string
# u'The Dormouse's story'

在用的过程中还是遇到乱码了,就是用这个方法获取这个网址的title是乱码,不知有解不?
http://www.joy.cn/
cloverstd
2014-05-25 00:55:03 +08:00
乱码可能是 gzip 压缩了
binux
2014-05-25 01:09:15 +08:00
@hao1032 requests
caomu
2014-05-25 01:14:37 +08:00
1.网上有类似的服务吗?
> 关于这个我想到的是 YQL 。。。
Sylv
2014-05-25 04:40:08 +08:00
@hao1032

import requests
from bs4 import BeautifulSoup

r = requests.get("http://www.joy.cn")
r.encoding = requests.utils.get_encodings_from_content(r.content)[0]
soup = BeautifulSoup(r.text)
print soup.title.string


参考: http://liguangming.com/python-requests-ge-encoding-from-headers
ccbikai
2014-05-25 14:20:20 +08:00
@Sylv 18楼和我的方法一样,如果乱码最后一句改print soup.title.get_text()
dbow
2014-05-25 18:26:01 +08:00
上lxml用XPATH表达式最快,"html/head/title"

from lxml import etree
etree.HTML(content).xpath("/html/head/title")[0]

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/109065

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX