解析 BeautifulSoup 中 select 下的所有选项

Nam*_*eja 1 python mechanize beautifulsoup web-scraping python-2.7

我有一个 HTML,其中有多个选择标签和每个选择标签下的多个下拉选项我想解析每个选择下的所有选项并存储它们

这就是 html 的样子

<select name="primary_select">
    <option></option>
    <option></option>
</select>
<select name="secondary_select">
    <option></option>
    <option></option>
</select>
Run Code Online (Sandbox Code Playgroud)

这就是我的代码的样子

我在 python 中使用 beautifulsoup 和 mechanize

汤 = BeautifulSoup(response.get_data())

 subject_options = soup.findAll('select', attrs = {'name': 'primary_select'} ).findAll("option")
print subject_options
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

AttributeError: 'ResultSet' object has no attribute 'findAll'
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助:)

Avi*_*Raj 5

findAll返回一个列表,您不能在其中直接应用另一个 findAll。

from bs4 import BeautifulSoup
html = '''<select name="primary_select">
    <option></option>
    <option></option>
</select>
<select name="secondary_select">
    <option></option>
    <option></option>
</select>'''
soup = BeautifulSoup(html)
subject_options = [i.findAll('option') for i in soup.findAll('select', attrs = {'name': 'primary_select'} )]
print subject_options
Run Code Online (Sandbox Code Playgroud)

输出:

[[<option></option>, <option></option>]]
Run Code Online (Sandbox Code Playgroud)

或者

使用 CSS 选择器。

soup = BeautifulSoup(html)
subject_options = soup.select('select[name=primary_select] > option')
print subject_options
Run Code Online (Sandbox Code Playgroud)

我想解析每个选择下的所有选项并存储它们。

subject_options = soup.select('select > option')
print subject_options
Run Code Online (Sandbox Code Playgroud)

输出:

[<option></option>, <option></option>, <option></option>, <option></option>]
Run Code Online (Sandbox Code Playgroud)