V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
hao1032
V2EX  ›  Python

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

  •  
  •   hao1032 · 2014 年 4 月 18 日 · 10301 次点击
    这是一个创建于 4308 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1.网上有类似的服务吗?
    给一个网址如www.baidu.com,返回网页的标题 百度一下

    2.有能满足这个需求的源码吗?
    因为什么样的网站都有自己写还要处理编码什么的。
    第 1 条附言  ·  2014 年 5 月 24 日
    文档: http://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
    使用了@kehr 说的bs4,用的就是链接里面的例子。
    soup.title.string
    # u'The Dormouse's story'

    在用的过程中还是遇到乱码了,就是用这个方法获取这个网址的title是乱码,不知有解不?
    http://www.joy.cn/
    24 条回复    2017-08-30 17:21:12 +08:00
    nervouna
        1
    nervouna  
       2014 年 4 月 18 日
    你确定你只要 title?这算是抓取网页里最简单的一件事了吧……
    Google Beautiful Soup
    ericls
        2
    ericls  
       2014 年 4 月 18 日 via Android
    手机打一个
    from pyquery import PyQuery as pq

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

    不知道对不对
    fay
        3
    fay  
       2014 年 4 月 18 日
    我在开发自己的莲蓬网的时候,需要获取网页标题等信息,顺手抽离了这部分的代码: https://github.com/fay/pagemeta
    tonghuashuai
        4
    tonghuashuai  
       2014 年 4 月 18 日
    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
        5
    tonghuashuai  
       2014 年 4 月 18 日
    行号杯具了
    davidli
        6
    davidli  
       2014 年 4 月 18 日
    楼上正解

    网站的标题应该都是在<title></title>里吧。
    yhf
        7
    yhf  
       2014 年 4 月 18 日 via iPhone
    BeautifulSoup 随便哪个节点由你抓
    lifemaxer
        8
    lifemaxer  
       2014 年 4 月 18 日
    以当前页为例,
    soup = BeautifulSoup(content) #content为当前页数据
    a = soup.find_all('title')[0].get_text()
    hao1032
        9
    hao1032  
    OP
       2014 年 4 月 18 日
    @tonghuashuai
    这个在实际应用中会出错的,获取的title编码不知道是什么,还要获取网页里面的charset,然后解码。

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

    文档: http://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
    hao1032
        14
    hao1032  
    OP
       2014 年 5 月 24 日
    @kehr 使用bs4,用的就是你发到链接里面的例子。
    soup.title.string
    # u'The Dormouse's story'

    在用的过程中还是遇到乱码了,就是用这个方法获取这个网址的title是乱码,不知有解不?
    http://www.joy.cn/
    cloverstd
        15
    cloverstd  
       2014 年 5 月 25 日
    乱码可能是 gzip 压缩了
    binux
        16
    binux  
       2014 年 5 月 25 日
    @hao1032 requests
    caomu
        17
    caomu  
       2014 年 5 月 25 日
    1.网上有类似的服务吗?
    > 关于这个我想到的是 YQL 。。。
    Sylv
        18
    Sylv  
       2014 年 5 月 25 日
    @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
        19
    ccbikai  
    PRO
       2014 年 5 月 25 日 via Android
    @Sylv 18楼和我的方法一样,如果乱码最后一句改print soup.title.get_text()
    dbow
        20
    dbow  
       2014 年 5 月 25 日
    上lxml用XPATH表达式最快,"html/head/title"

    from lxml import etree
    etree.HTML(content).xpath("/html/head/title")[0]
    diaoleona
        21
    diaoleona  
       2014 年 5 月 27 日
    @dbow 不能同意更多
    hao1032
        22
    hao1032  
    OP
       2014 年 5 月 29 日
    @Sylv 这个要加个import,我看了这个文章http://www.cnblogs.com/todoit/archive/2013/04/08/3008513.html
    加了个from_encoding="gb18030",测试这个网站是可以的。
    如果后面有问题,再使用你的这个方法。
    xiaowangge
        23
    xiaowangge  
       2014 年 9 月 5 日
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-

    import requests
    from lxml import html

    response = requests.get('http://www.joy.cn/')

    # Parse the body into a tree
    parsed_body = html.fromstring(response.text)

    print ''.join(parsed_body.xpath('//title/text()'))
    funnybunny00
        24
    funnybunny00  
       2017 年 8 月 30 日
    福音
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2515 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:52 · PVG 20:52 · LAX 04:52 · JFK 07:52
    ♥ Do have faith in what you're doing.