Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Beautifulsoup4和Python 2.7解析web表单_Python_Html_Python 2.7_Beautifulsoup_Html Parsing - Fatal编程技术网

使用Beautifulsoup4和Python 2.7解析web表单

使用Beautifulsoup4和Python 2.7解析web表单,python,html,python-2.7,beautifulsoup,html-parsing,Python,Html,Python 2.7,Beautifulsoup,Html Parsing,我有以下解析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 上面返回的结果如下: <option selected="" va

我有以下解析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
上面返回的结果如下:

<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>
any
汽车
·摩托车
·船只
飞机
·潜艇
我想做的是创建一个字典,这样,键将是,例如'4',值将是'cars'。因此,每个选项值都是一个键,描述就是值

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


可以提供任何帮助吗?

这个想法是找到所有
选项
元素,这些元素具有
,并且没有
选定属性
;使用词典理解制作词典:

# -*- 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'
}