操作BeautifulSoup的ResultSet列表对象

4 投票
2 回答
9741 浏览
提问于 2025-04-28 11:31

我想提取两段数据:1)选项元素的“value”属性的值(比如下面的“01000.html”)。2)在<option></option>标签之间的字符串(比如“Alabama”)。关于我使用的ResultSet列表对象的信息很有限。

url = 'http://quickfacts.census.gov/qfd/states/'
page = urllib2.urlopen(url)
soup = BeautifulSoup(page)
state_list = soup.find_all("option")

这段代码是用来从美国人口普查QFD页面的下拉菜单中提取州的列表(这个下拉菜单本身就是一个包含这些选项的元素)。

总的来说,我想用一个简单的计数器遍历美国的所有县,但显然县和州的编号并不统一。因此,我想建立一个这些选项的列表,以便遍历“value”(这部分会成为URL的一部分)属性对应的“州(字符串)”。

state_list

[<option value="01000.html">Alabama</option>,
 <option value="02000.html">Alaska</option>,
 <option value="04000.html">Arizona</option>,
 <option value="05000.html">Arkansas</option>,
 <option value="06000.html">California</option>,
 <option value="08000.html">Colorado</option>,
 <option value="09000.html">Connecticut</option>,
 <option value="10000.html">Delaware</option>,
 <option value="11000.html">District of Columbia</option>,
 <option value="12000.html">Florida</option>,
 <option value="13000.html">Georgia</option>,
 <option value="15000.html">Hawaii</option>,
 <option value="16000.html">Idaho</option>,
 <option value="17000.html">Illinois</option>,
 <option value="18000.html">Indiana</option>,
 <option value="19000.html">Iowa</option>,
 <option value="20000.html">Kansas</option>,
 <option value="21000.html">Kentucky</option>,
 <option value="22000.html">Louisiana</option>,
 <option value="23000.html">Maine</option>,
 <option value="24000.html">Maryland</option>,
 <option value="25000.html">Massachusetts</option>,
 <option value="26000.html">Michigan</option>,
 <option value="27000.html">Minnesota</option>,
 <option value="28000.html">Mississippi</option>,
 <option value="29000.html">Missouri</option>,

(etc...)
暂无标签

2 个回答

1

因为循环是最有可能的解决方案,我们可以用一行简单的代码把对象转换成字典或者列表的列表。

DiCt = {state.text: state['value'] for state in state_list}
LofLists = [[state.text, state['value']] for state in state_list]
4

你可以像使用字典一样提取标签的属性,并且可以通过 .text 属性来获取文本内容。

for state in state_list:
    print state['value'].split(".")[0], state.text

撰写回答