【问题标题】:Manipulating BeautifulSoup's ResultSet list object操作 BeautifulSoup 的 ResultSet 列表对象
【发布时间】:2014-10-20 02:31:55
【问题描述】:

我正在尝试提取两条数据:1)选项元素的“value”属性的值(即下面的“01000.html”)。 2) <option></option> 标签内的字符串(即“Alabama”)。使用 I use 创建的 ResultSet 列表对象的信息有限

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

从美国人口普查 QFD 页面的下拉菜单中提取州列表(其本身就是具有这些选项的元素)。

大局,我试图使用简单的 i 计数器遍历美国的所有县,但显然县和州的编号并不统一。因此,我试图构建这些选项的列表,以便遍历“状态(字符串)”的“值”(成为 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...)

【问题讨论】:

  • Bill Letson 对您提出的问题有正确答案,但这些是FIPS codes。从this EPA page 获取代码并在末尾添加“000”,您就有了州代码。 (同一个 EPA 页面链接到特定于州的页面,每个县都有最后三位数字(例如,29(密苏里州)+ 019(布恩县)= 29019(密苏里州布恩县))。)我还扔了@987654323几年前@在一起,以防万一。
  • 哇,太棒了。非常感谢!

标签: python beautifulsoup scraper


【解决方案1】:

您可以像字典一样提取标签属性,并使用 .text 属性访问文本。

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

【讨论】:

    【解决方案2】:

    由于迭代是最可能的解决方案,我们可以使用简单的单行将对象转换为字典或列表列表。

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

    【讨论】:

      猜你喜欢
      • 2016-12-19
      • 2013-03-30
      • 1970-01-01
      • 2013-06-20
      • 2018-07-24
      • 2016-02-04
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      相关资源
      最近更新 更多