请教一个( BeautifulSoup)爬虫获取标签 text 内容时,对带有<font></font>这类类标签处理方法。 - 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
a412739861
V2EX    Python

请教一个( BeautifulSoup)爬虫获取标签 text 内容时,对带有<font></font>这类类标签处理方法。

  •  
  •   a412739861 2016-05-07 01:45:44 +08:00 15810 次点击
    这是一个创建于 3452 天前的主题,其中的信息可能已经有所发展或是发生改变。
    尝试着用 python3 和 BeautifulSoup4 爬一些内容。
    显示登陆之类的,然后使用 BS 的 find_all("tr")功能就都可以找到所有 tr 标签,用遍历打印 result.td.string 的方法,打印每个表格下第一个 td 的标签内容

    有一个的 td.string 报错,无法只打印出标签文字内容。只有 None
    我把这个 td 的全部内容直接打印出来,出现如下形式:

    <td colspan="2">名称:XXX<font color="#E1E100">xxx</font></td>

    问题就应该是出在标签内容里的<font color></font>标签,识别失败。

    我想到的办法是,大概把这段内容正则匹配,去掉后面的标签,正则不太熟练,想问问 BeautifulSoup 本身的功能能否比较好的解决这一点呢?

    其实还有一个比较奇怪的问题,同一个网页,我用网络请求的办法去获取这个网页,解析没问题,当我自己下载了以后,再去用 BeautifulSoup 的 open 方法打开就不行。我记得很早以前我下载了再去解析是可以的……网页编码是 gbk 。
    第 1 条附言    2016-05-14 11:02:38 +08:00
    标题的问题, 3L 提供的方案可以很快解决。我自己的尝试在 4L 。
    append 一下正文里另外一个小问题的解决办法:
    使用系统的 open 方法时,把编码带上 open(path, encoding='gbk')然后在用 BS4 打开其中的文章就可以了。
    BS4 应该的 open 方法里面也有这个参数,不过当初开始用的时候,出错了。
    可能是因为这个文件标明的是 UTF-8 ,实际则是 gbk 的原因吧。
    4 条回复    2016-05-07 11:03:30 +08:00
    pimin
        1
    pimin  
       2016-05-07 01:58:58 +08:00 via Android   1
    直接解析 HTML 不就可以了
    一般用 lxml 比较多
    TaoAlpha
        2
    TaoAlpha  
       2016-05-07 02:46:14 +08:00   1
    .findAll(text=True) 可以直接提取 text, 忽略内部所有嵌套的 tag.
    ahcat
        3
    ahcat  
       2016-05-07 03:19:03 +08:00 via iPhone   1
    不用 string ,用 get_text ()
    a412739861
        4
    a412739861  
    OP
       2016-05-07 11:03:30 +08:00
    @pimin
    获取网页时,解析用的是 HTML ,代码是 BeautifulSoup(html.content, "html.parser")
    本地 open 时,好像无法选择, open (地址),无法加上 html.parser


    @TaoAlpha
    findAll(text=True)时,的确会直接提取整个 html 的 text 。
    但是一旦我加上 BS 的 find_all("tr"), name 参数,再加上 keywords 查找对应 tag 里面含有某个属性的筛选条件时,就不行了,只打印出[]。
    搜索到的一个文档,说「如果你使用 text ,任何指定给 name 以及 keyword 参数的值都会被忽略。」。

    看了下文档, text 可以接受正则,我把搜索条件用正则写在 text=re.compile("pattern"),取出掉前面的 name 和 keywords 参数,的确能够直接搜索到要内容。^_^


    @ahcat
    这方法我喜欢,简单粗暴直接有效!
    特意在文档里搜索,写的是返回文字内容。没写对这些的标签的处理,大概作者认为使用者都是 html 有比较好的了解,能够领悟吧(为自己没仔细看找借口)………
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2704 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 12:15 PVG 20:15 LAX 05:15 JFK 08:15
    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