名称和值查找集合,使用 beautifulsoup 从下拉列表中加载

发布于 2024-09-12 14:27:56 字数 356 浏览 1 评论 0原文

在我的 html 页面上,我有一个下拉列表:

<select name="somelist">
   <option value="234234234239393">Some Text</option>
</select>

所以请获取我正在做的列表:

ddl = soup.findAll('select', name="somelist")

if(ddl):
    ???

现在我需要有关此集合/字典的帮助,我希望能够通过“某些文本”和 234234234239393 进行查找。

这可能吗?

On my html page I have a dropdown list:

<select name="somelist">
   <option value="234234234239393">Some Text</option>
</select>

So do get this list I am doing:

ddl = soup.findAll('select', name="somelist")

if(ddl):
    ???

Now I need help with this collection/dictionary, I want to be able to lookup by both 'Some Text' and 234234234239393.

Is this possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

就像说晚安 2024-09-19 14:27:56

请尝试以下操作来开始:

str = r'''
<select name="somelist">
   <option value="234234234239393">Some Text</option>
   <option value="42">Other text</option>
</select>
'''

soup = BeautifulSoup(str)
select_node = soup.findAll('select', attrs={'name': 'somelist'})

if select_node:
    for option in select_node[0].findAll('option'):
        print option

它打印出 option 节点:

<option value="234234234239393">Some Text</option>
<option value="42">Other text</option>

现在,对于每个 optionoption['value'] 是值属性,option.text 是标签内的文本(“Some Text”)

Try the following to get started:

str = r'''
<select name="somelist">
   <option value="234234234239393">Some Text</option>
   <option value="42">Other text</option>
</select>
'''

soup = BeautifulSoup(str)
select_node = soup.findAll('select', attrs={'name': 'somelist'})

if select_node:
    for option in select_node[0].findAll('option'):
        print option

It prints out the option nodes:

<option value="234234234239393">Some Text</option>
<option value="42">Other text</option>

Now, for each option, option['value'] is the value attribute, and option.text is the text inside the tag ("Some Text")

冷情妓 2024-09-19 14:27:56

这是一种方法..

ddl_list = soup.findAll('select', attrs={'name': 'somelist'})
if ddl_list:
    ddl = ddl_list[0]

    # find the optino by value=234234234239393
    opt = ddl.findChild('option', attrs={'value': '234234234239393'})
    if opt:
        # do something

    # this list will hold all "option" elements matching 'Some Text'
    opt_list = [opt for opt in ddl.findChildren('option') if opt.string == u'Some Text']
    if opt_list:
        opt2 = opt_list[0]
        # do something

Here's one way ..

ddl_list = soup.findAll('select', attrs={'name': 'somelist'})
if ddl_list:
    ddl = ddl_list[0]

    # find the optino by value=234234234239393
    opt = ddl.findChild('option', attrs={'value': '234234234239393'})
    if opt:
        # do something

    # this list will hold all "option" elements matching 'Some Text'
    opt_list = [opt for opt in ddl.findChildren('option') if opt.string == u'Some Text']
    if opt_list:
        opt2 = opt_list[0]
        # do something
錯遇了你 2024-09-19 14:27:56

再次,只是为了展示如何使用 pyparsing 来做到这一点:

html = r''' 
<select name="somelist"> 
   <option value="234234234239393">Some Text</option> 
   <option value="42">Other text</option> 
</select> 
''' 

from pyparsing import makeHTMLTags, Group, SkipTo, withAttribute, OneOrMore

select,selectEnd = makeHTMLTags("SELECT")
option,optionEnd = makeHTMLTags("OPTION")

optionEntry = Group(option("option") + 
                    SkipTo(optionEnd)("menutext") + 
                    optionEnd)

somelistSelect = (select.setParseAction(withAttribute(name="somelist")) +
                    OneOrMore(optionEntry)("options") +
                    selectEnd)

t,_,_ = somelistSelect.scanString(html).next()

for op in t.options:
    print op.menutext, '->', op.option.value

打印:

Some Text -> 234234234239393
Other text -> 42

And again, just to show how one could do this with pyparsing:

html = r''' 
<select name="somelist"> 
   <option value="234234234239393">Some Text</option> 
   <option value="42">Other text</option> 
</select> 
''' 

from pyparsing import makeHTMLTags, Group, SkipTo, withAttribute, OneOrMore

select,selectEnd = makeHTMLTags("SELECT")
option,optionEnd = makeHTMLTags("OPTION")

optionEntry = Group(option("option") + 
                    SkipTo(optionEnd)("menutext") + 
                    optionEnd)

somelistSelect = (select.setParseAction(withAttribute(name="somelist")) +
                    OneOrMore(optionEntry)("options") +
                    selectEnd)

t,_,_ = somelistSelect.scanString(html).next()

for op in t.options:
    print op.menutext, '->', op.option.value

prints:

Some Text -> 234234234239393
Other text -> 42
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文