zoukankan      html  css  js  c++  java
  • python抽取指定url页面的title方法

    python抽取指定url页面的title方法

    今天简单使用了一下python的re模块和lxml模块,分别利用的它们提供的正则表达式和xpath来解析页面源码从中提取所需的title,xpath在完成这样的小任务上效率非常好,在这里之所以又使用了一下正则表达式是因为xpath在处理一些特殊的页面的时候会出现乱码的情况,当然这不是xpath的原因,而是页面本身编码,跟utf-8转码之间有冲突所致,

    这里看代码:    
    # !/usr/bin/python
    #-*-coding:utf-8-*-
    '''
    功能:抽取指定url的页面内容中的title
    '''
    import re
    import chardet
    import urllib
    from lxml import etree
    def utf8_transfer(strs):
     '''
     utf8编码转换
     '''
     try:
      if isinstance(strs, unicode):
       strs = strs.encode('utf-8')
      elif chardet.detect(strs)['encoding'] == 'GB2312':
       strs = strs.decode("gb2312", 'ignore').encode('utf-8')
      elif chardet.detect(strs)['encoding'] == 'utf-8':
       strs = strs.decode('utf-8', 'ignore').encode('utf-8')
     except Exception, e:
      print 'utf8_transfer error', strs, e
     return strs
    def get_title_xpath(Html):
     '''
     用xpath抽取网页Title
     '''
     Html = utf8_transfer(Html)
     Html_encoding = chardet.detect(Html)['encoding']
     page = etree.HTML(Html, parser=etree.HTMLParser(encoding=Html_encoding))
     title = page.xpath('/html/head/title/text()')
     try:
      title = title[0].strip()
     except IndexError:
      print 'Nothing'
     print title
    def get_title(Html):
     '''
     用re抽取网页Title
     '''
     Html = utf8_transfer(Html)
     compile_rule = ur''
     title_list = re.findall(compile_rule, Html)
     if title_list == []:
      title = ''
     else:
      title = title_list[0][7:-8]
     print title
    if __name__ == '__main__':
        url = 'http://www.baidu.com'
        html = urllib.urlopen(url).read()
        new_html = utf8_transfer(html)
        try:
            get_title_xpath(new_html)
            get_title(new_html)
        except Exception, e:
            print e
    下面是结果:
    百度一下,你就知道
    百度一下,你就知道
    简单的小实践,继续学习,欢迎交流。
    以上这篇python抽取指定url页面的title方法就是小编分享给大家的全部内容了,希望能给大家一个参考

  • 相关阅读:
    基于HTML5的可预览多图片Ajax上传
    在linq查询环境下通过sql语句来访问数据库
    EF查询数据库框架的搭建
    用多线程处理后台业务,并提高处理速度
    WPF 大数据加载过程中的等待效果——圆圈转动
    .NET一个线程更新另一个线程的UI(两种实现方法及若干简化)
    通电螺线管与磁场方向
    MOS管与三极管
    word2007怎样从中间某一页开始设置页码
    word删除页眉横线
  • 原文地址:https://www.cnblogs.com/amengduo/p/9586336.html
Copyright © 2011-2022 走看看