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

大家如何提取 html 中的表单?(Python)

  •  
  •   tdifg · 2015-02-23 21:06:14 +08:00 · 8425 次点击
    这是一个创建于 3561 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近没什么事,重做一下自己的爬虫。于是想加一个表单提取的功能,我目的是能直接传入html他就能解析出表单的结构,就是个类似下面的一个结果:
    {
    'post_url':'',
    'input_field1':'',

    'input_field2':'',
    'select_field1':'',
    ...

    }

    查资料发现如下几个方法:
    1. mechanize,ghost.py
    优点:方便,ghost还支持js解析
    缺点:慢,非标准库,处理方式不符合要求(要重新发起请求)
    2. 正则
    优点:能符合要求
    缺点:错误率高

    请问大家是怎么匹配页面中的表单?

    6 条回复    2015-02-24 15:04:09 +08:00
    aec4d
        1
    aec4d  
       2015-02-23 21:26:54 +08:00
    用pyquery 如果你喜欢用jQuery的话
    banbanchs
        2
    banbanchs  
       2015-02-23 21:59:08 +08:00
    用解析html的库:pyquery、Beautiful Soup、lxml什么的把<form>找到,解析里面的input标签就好了
    tdifg
        3
    tdifg  
    OP
       2015-02-23 22:55:06 +08:00
    @banbanchs
    @aec4d
    恩,我知道这些,而且以前就是用这些库的。但是主要这次想用标准库解决,因为部署在机器上的时候第三方库不太方便(想扩展成分布式的)。而且,话说以前用lxml的时候老是因为编码,奇怪的html结构什么的出错。或者自己写一个xml解析?
    chinvo
        4
    chinvo  
       2015-02-24 10:13:24 +08:00
    @tdifg 只有xhtml嚴格準訓xml規範,一視同仁地用xml解析可能會出現問題。你可以用正則。
    zhanglp888
        5
    zhanglp888  
       2015-02-24 11:21:20 +08:00
    先用tidy,将你要抓取的html整理好了,再写正则,或用pyquery
    基本上不会太大问题
    tdifg
        6
    tdifg  
    OP
       2015-02-24 15:04:09 +08:00
    恩,之前想麻烦了,现在直接正则出form,然后正则input,最后逐条正则里面的属性,貌似可以达成目标了。哎,到底是没学过html啊。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2704 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:34 · PVG 18:34 · LAX 02:34 · JFK 05:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.