从选择中解析选项

时间:2016-11-27 15:48:46

标签: python selenium request

我想获得以下内容:

<select name="Detect" id="313" class="select" style="display: none;">
<option value="650" maxmad="15" maxpad="2" status="TRUE" context="24"> 5 </option>

<option value="660" maxmad="16" maxpad="2" status="TRUE" context="25"> 6 </option>

我想刮掉并打印出以下内容,650来自“value”,15来自“maxmad”并打印出来(有很多这些选项,我想打印所有这些) :

650: 15
660: 16
670: 17
etc
etc

这是我尝试过的:

driver = webdriver.PhantomJS()
window = driver.set_window_size(1120, 550)
site = driver.get("www.website.com")
soup = BeautifulSoup(site, "html.parser")
for option in soup.find_all("option"):
    print('id: {}, maxmad: {}'.format(option['id'], option.text))

1 个答案:

答案 0 :(得分:0)

这里有多个错误,因为每次下载页面都比较难以找到和尝试。您应该首先制作一个包含相关代码的最小HTML文件,然后使用它来测试解析代码。

然后,您会注意到使用site.find_all时应该使用soup.find_all的第一件事。修复后,您会发现option没有id,并且您应该搜索select以获取id

from bs4 import BeautifulSoup

html_str = """
<html>
<body>
<select name="Detect" id="313" class="select" style="display: none;">
<option value="650" maxmad="15" maxpad="2" status="TRUE" context="24"> 5 </option>
<option value="660" maxmad="16" maxpad="2" status="TRUE" context="25"> 6 </option>
</body>
</html>
"""

soup = BeautifulSoup(html_str, "html.parser")
select = soup.select("select")[0]
for select in soup.select("select"):
    ident = select['id']
    for option in select.find_all("option"):
        print('value: {}, maxmad: {}'.format(option['value'], option['maxmad'])

给出:

value: 650, maxmad:  15 
value: 660, maxmad:  16