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
hatni
V2EX  ›  Python

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

  •  
  •   hatni · 2015-04-14 17:43:18 +08:00 · 7469 次点击
    这是一个创建于 3544 天前的主题,其中的信息可能已经有所发展或是发生改变。
    新手看不懂 Beautiful Soup文档,大家可以提供一些思路吗? 我不是伸手党
    22 条回复    2015-04-15 16:27:53 +08:00
    staticor
        1
    staticor  
       2015-04-14 18:16:41 +08:00   ❤️ 1
    我也不熟悉bs4, 楼主可以尝试一下先查看html文档, 熟悉熟悉基本结构.

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

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

    这个搞利落的咱们再找找更优雅的方式吧
    staticor
        2
    staticor  
       2015-04-14 18:28:12 +08:00
    source = open(file1, 'r').read()

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

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

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

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

    只要<body> 提取出来,随便你写成什么格式
    icedx
        4
    icedx  
       2015-04-14 20:16:48 +08:00 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  
       2015-04-14 21:50:21 +08:00   ❤️ 1
    readability提供了提取正文的api,返回的html可以使用amazon kindlegen生成mobi格式
    icedx
        6
    icedx  
       2015-04-14 22:24:02 +08:00
    不对 我那个不能用...
    icedx
        7
    icedx  
       2015-04-14 22:35:14 +08:00
    https://gist.github.com/anonymous/bf0e27d046e3c5c90168

    这个还有一点瑕疵 但是已经接近完美
    ztmark
        8
    ztmark  
       2015-04-14 23:01:00 +08:00   ❤️ 1
    xiaoboost
        9
    xiaoboost  
       2015-04-14 23:07:28 +08:00   ❤️ 1
    mobi?想要在kindle上看的是吗?

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

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