使用 Beautifulsoup 4 和 Python 2.7 解析 Web 表单

Parsing a web form using Beautifulsoup 4 and Python 2.7

我有以下代码解析 HTML 以提取 URL 的表单字段:-

import urllib2
from bs4 import BeautifulSoup

url = "http://www.myurl.com"

soup = BeautifulSoup(urllib2.urlopen("./test.html").read());
for tag in soup.find_all('option'):
    print tag

上面returns下面:

<option selected="" value="">any</option>
<option value="4">cars</option>
<option value="61">· motorbikes</option>
<option value="5">· boats</option>
<option value="17">planes</option>
<option value="40">· submarines</option>

我想要做的是创建一个字典,例如,键是“4”,值是 'cars'。所以,每个选项值都是一个键,描述就是值。

我正在考虑进行一些切片(即从字符 14 切片到 X 以获得数字),但我想知道是否有更有效的方法来执行此操作。另外,我希望忽略也返回的第一行。我只想将 "option value" 解析到字典中,而不是 "option selected"。另外,可以看出,一些值/描述前面有 "· " - 我也希望忽略它。

可以提供任何帮助吗?

想法是找到所有具有 value 而没有 selected 属性的 option 元素;使用字典理解来制作字典:

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup

data = u"""
<select>
    <option selected="" value="">any</option>
    <option value="4">cars</option>
    <option value="61">· motorbikes</option>
    <option value="5">· boats</option>
    <option value="17">planes</option>
    <option value="40">· submarines</option>
</select>
"""

soup = BeautifulSoup(data)
print {option['value']: option.text.lstrip(u"· ") 
       for option in soup.find_all('option', value=True, selected=False)}

打印:

{
    '61': u'motorbikes', 
    '5': u'boats', 
    '4': u'cars', 
    '17': u'planes', 
    '40': u'submarines'
}