【问题标题】:Scraping datalist tag using python beautifusoap使用 python beautifusoap 抓取数据列表标签
【发布时间】:2019-07-31 14:51:32
【问题描述】:

我试图抓取一个 DATALIST 标记,其中有很多选项。我想将这些选项作为列表抓取。

当我使用 soup.findAll() 时,它会将所有选项存储在一个盒子中,这不允许我迭代和查找值。以下是我试图抓取的代码。

 <datalist id="brands">
        <option id="7638" value="Ashok Leyland">
        </option>
        <option id="3960" value="Aston Martin">
        </option>
        <option id="205" value="Audi">
        </option>
        <option id="207" value="BMW">
        </option>
        <option id="206" value="Bentley">
        </option>
        <option id="7648" value="Bugatti">
        </option>
        <option id="7652" value="Caterham">
        </option>
        <option id="212" value="Hindustan Motors">
        </option>
        <option id="54157" value="Jeep">
        </option>
       </datalist>

ctr=soup.findAll('datalist',{'id':'brands'})

ctr 只有一个包含完整代码的元素。我不知道如何从选项中获取所有值的列表。当我尝试使用 for 循环时,它只运行第一个。

【问题讨论】:

标签: python web-scraping beautifulsoup option html-datalist


【解决方案1】:

您可以使用 CSS 选择器 #brands option[value] -> 这将选择带有 value= 属性的所有 &lt;option&gt; 标记,这些标记位于带有 id="brands" 的标记下:

data = ''' <datalist id="brands">
        <option id="7638" value="Ashok Leyland">
        </option>
        <option id="3960" value="Aston Martin">
        </option>
        <option id="205" value="Audi">
        </option>
        <option id="207" value="BMW">
        </option>
        <option id="206" value="Bentley">
        </option>
        <option id="7648" value="Bugatti">
        </option>
        <option id="7652" value="Caterham">
        </option>
        <option id="212" value="Hindustan Motors">
        </option>
        <option id="54157" value="Jeep">
        </option>
       </datalist>'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(data, 'lxml')

out = [option['value'] for option in soup.select('#brands option[value]')]

print(out)

打印:

['Ashok Leyland', 'Aston Martin', 'Audi', 'BMW', 'Bentley', 'Bugatti', 'Caterham', 'Hindustan Motors', 'Jeep']

进一步阅读:

CSS Selector Reference

【讨论】:

  • 非常感谢!像魅力一样工作!我也尝试使用 css 选择器,但我只写了,soup.select('#brands'),它最终给了我相同的输出! @andrejkesely
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 2015-12-02
  • 2020-05-19
  • 2020-11-09
  • 1970-01-01
相关资源
最近更新 更多