V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
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
hatni
V2EX  ›  Python

如何用 Python 将若干 html 文件提取正文,并转换成 mobi 或 txt 格式?

  •  
  •   hatni · Apr 14, 2015 · 8256 views
    This topic created in 4038 days ago, the information mentioned may be changed or developed.
    新手看不懂 Beautiful Soup文档,大家可以提供一些思路吗? 我不是伸手党
    22 replies    2015-04-15 16:27:53 +08:00
    staticor
        1
    staticor  
       Apr 14, 2015   ❤️ 1
    我也不熟悉bs4, 楼主可以尝试一下先查看html文档, 熟悉熟悉基本结构.

    <head> <body> <td>... 什么的

    然后就把html当成一个很长的字符串, 用正则分割处理一下.

    这个搞利落的咱们再找找更优雅的方式吧
    staticor
        2
    staticor  
       Apr 14, 2015
    source = open(file1, 'r').read()

    print(source.split('<title>')[1].split('</title>')[0])

    这里没用正则, 就是str的最基本的split函数. 希望有所帮助
    (我也是抛砖引玉了)
    saki
        3
    saki  
       Apr 14, 2015   ❤️ 1
    如果不复杂的话,直接用HTMLPaser就可以了,可以提取指定标签

    https://docs.python.org/2/library/htmlparser.html

    栗子:
    http://www.pythonclub.org/python-files/htmlparser

    只要<body> 提取出来,随便你写成什么格式
    icedx
        4
    icedx  
       Apr 14, 2015 via Android   ❤️ 1
    Out=[]
    Pass=0
    for char in page:
    if Pass=0:
    if char=='<':
    Pass=1
    continue
    else:
    if char=='>'
    Pass=0
    continue
    else:
    Out.append(Char)
    else:
    pass
    Fatch=''.join(Out)

    既然楼主不是伸手党
    补全缩进就可以用了
    tinybvjk
        5
    tinybvjk  
       Apr 14, 2015   ❤️ 1
    readability提供了提取正文的api,返回的html可以使用amazon kindlegen生成mobi格式
    icedx
        6
    icedx  
       Apr 14, 2015
    不对 我那个不能用...
    icedx
        7
    icedx  
       Apr 14, 2015
    https://gist.github.com/anonymous/bf0e27d046e3c5c90168

    这个还有一点瑕疵 但是已经接近完美
    xiaoboost
        9
    xiaoboost  
       Apr 14, 2015   ❤️ 1
    mobi?想要在kindle上看的是吗?

    我以前用正则提取的,最后程序把正文存成docx文件,发到自己kindle邮箱
    mobi是亚马逊自己的格式,不开源的,貌似没有现成的制作方法吧
    crccw
        10
    crccw  
       Apr 15, 2015 via Android
    BeautifulSoup挺好用的啊。。
    endoffight
        11
    endoffight  
       Apr 15, 2015 via Android
    更直观的话,我给楼主推荐
    pyquery
    endoffight
        12
    endoffight  
       Apr 15, 2015 via Android
    忘了给给文档了 )逃

    https://pypi.python.org/pypi/pyquery
    metrue
        13
    metrue  
       Apr 15, 2015
    http://get.jobdeer.com/122.get 可以参考实现。
    XcodeUser
        14
    XcodeUser  
       Apr 15, 2015
    学下xpath,然后用lxml不就挺好挺快吗
    hatni
        15
    hatni  
    OP
       Apr 15, 2015
    @icedx 感谢你的代码,刚刚试了下打开乱码,手动添加了网页编码 可行。我经管系,自学python,看了点Html CSS,陆续几个月始终没入门JavaScript。
    hatni
        16
    hatni  
    OP
       Apr 15, 2015
    @endoffight pyquery ,这个需要懂Jquery,计划准备学,
    BOYPT
        17
    BOYPT  
       Apr 15, 2015
    @hatni pyquery 和jquery可没什么关系,共同个的是,pyquery和jquery都实现了类似的css选择器的功能。
    MayLava
        18
    MayLava  
       Apr 15, 2015
    pyquery+html2text 直接转成markdown格式
    hatni
        19
    hatni  
    OP
       Apr 15, 2015
    多谢各位的帮助,我只刚看完《Learn Python the Hard Way》。Beautiful Soup 、xpath 、xml 、 pyquery 、正则表达式,上面各种 新手应该按照怎样的难易顺序来学。
    icedx
        20
    icedx  
       Apr 15, 2015 via Android
    @hatni 以后要从事开发么
    Loop680
        21
    Loop680  
       Apr 15, 2015
    我之前做了一个提取PDF内容转换成TXT的小工具,用的是正则做的。
    fburst
        22
    fburst  
       Apr 15, 2015   ❤️ 1
    这个我试过很多种方案,
    beautfulsoup虽然没用过,但是应该是效果最好的。
    其他的那些库容错率太低了,少个引号什么的都不行。比如<body>标签,html5标准里是可以不闭合的,也解析不出。
    有瑕疵的网页还是比较多的,就算163什么的也免不了。
    目前方案是selenium直接对接firefox。通过firefox的解析器解析html,然后js直接提取词条。这样firefox解析成什么样,我得到的就是什么。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2525 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 15:08 · PVG 23:08 · LAX 08:08 · JFK 11:08
    ♥ Do have faith in what you're doing.