如何用 Python 将若干 html 文件提取正文,并转换成 mobi 或 txt 格式? - V2EX
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 8023 次点击
    这是一个创建于 3901 天前的主题,其中的信息可能已经有所发展或是发生改变。
    新手看不懂 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     Solana     5076 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 08:34 PVG 16:34 LAX 00:34 JFK 03:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86