python - beautifulsoup 怎样抓取 select 标签里面的 option 的文本?
迷茫
迷茫 2017-04-17 11:41:14
[Python讨论组]

我要抓取的页面的内容是在如下标签内的

<script language=javascript>parent.theZNPKT_CJJS1.innerHTML='<select id=T_CJJS1 name=T_CJJS1 style="HEIGHT: 20px;WIDTH:115"><option value=0000258>[0000789]Andrew</option></select>';</script>

我写的代码:

import urllib2
from bs4 import BeautifulSoup
url = 'xxx'
html = urllib2.urlopen(url)

soup = BeautifulSoup(html, from_encoding = 'gbk')
option = soup.findAll('option')
f = open("out.txt", "w")
print >> f, option
f.close()
print option

抓取出来的结果全都是 <option value="0000049">[0000049]ANNA</option> 这样的,我想提取 [0000049]ANNA 这个内容怎样做呀?

很多东西都不懂,经过搜索换了一种方法提取出来了。用的是正则的方法:

import urllib2
import re
url = 'xxx'
html = urllib2.urlopen(url).read()

patt = re.compile(r'<option.+?>(.+?)</option>')
option = patt.findall(html)
f = open("out.txt", "w")
for value in option:
    print value
    f.writelines(value + '\n')
f.close()
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(4)
伊谢尔伦

1.你要抓取的option等内容,很明显,是标签script内部的内容(content/text)

-》 所以没法用BeautifulSoup当做标签(的属性)去抓取

2.想要当做属性处理

一种办法:

在获得你所说的:

<option value="0000049">[0000049]ANNA</option>

后,再去把(用html标签括起来)组合成html,然后再用BeautifulSoup去当做html处理

-> 就可以获得option这个标签了

-> 就可以获得option的string了

3.当然,对于你这样的情况,相对来说,用(你已经用了的)正则,比用bs,效率更高。

4.关于beautifulSoup,可参考:

Python专题教程:BeautifulSoup详解

巴扎黑

option也是个元素,不是属性,你是不是应该写为soup.findAll('select option')呢? 我太久没有用BeautifulSoup了,具体的不记得怎么写。

黄舟

option = soup.findAll('option')
print option.string

大家讲道理

你这个用BS还是很好的选择,之时在打印的时候选择.string就可以了。
例如:

soup = BeautifulSoup(html, from_encoding = 'gbk')
option = soup.findAll('option')
print option.string

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号