抓取更多标签值 bs4 和其他库

Posted

技术标签:

【中文标题】抓取更多标签值 bs4 和其他库【英文标题】:scraping more tag value bs4 and other library 【发布时间】:2021-01-07 02:05:03 【问题描述】:

我正在尝试抓取以下 html

<select id="sizeShoe" name="attributes[&#39;size&#39;]" class="selectFld col-xs-12">
<option value="">Select Size</option>
<option value="025">2.5</option>
<option value="035">3.5</option>
<option value="040">4</option>
<option value="045">4.5</option>
<option value="050">5</option>
<option value="055">5.5</option>
<option value="060">6</option>
<option value="065">6.5</option>
<option value="070">7</option>
<option value="075">7.5</option>
<option value="080">8</option>
<option value="085" selected="selected">8.5</option>
<option value="090">9</option>
                        </select>

我需要创建一个具有以下值的字典:

argument = "2.5":"025", "3.5":"035, "4":"040" ecc...

我的尝试:

soup = BeautifulSoup(response.text, "lxml")
soup.prettify()

argument = 
sizeShoe = soup.find("select", attrs='id' : 'sizeShoe')
for a in sizeShoe:
   valor = sizeShoe.get("value")

但是valor的结果是None

如何抓取数据并将其保存为字典? 还有比 BeautifulSoup 更快的库吗?

【问题讨论】:

【参考方案1】:

有没有比 BeautifulSoup 更快的库?

查看Scrapy。见Difference between BeautifulSoup and Scrapy crawler?


尝试使用以下代码将数据抓取到字典中:

from bs4 import BeautifulSoup, NavigableString

html = '''YOUR ABOVE CODE SNIPPET'''

soup = BeautifulSoup(html, 'lxml')

shoe_size = soup.select_one('#sizeShoe')

# Check that 'tag' is not an instance of 'NavigableString'
# Check that the value of 'value' is not an empty string

argument = 
    tag.text: tag['value']
    for tag in shoe_size
    if not isinstance(tag, NavigableString) and tag['value']


print(argument)

输出:

'2.5': '025', '3.5': '035', '4': '040', '4.5': '045', '5': '050', '5.5': '055', '6': '060', '6.5': '065', '7': '070', '7.5':'075', '8': '080', '8.5': '085', '9': '090'

【讨论】:

【参考方案2】:

在这里找到代码:

from bs4 import BeautifulSoup

result_dict = 
soup = BeautifulSoup(html_data, 'html.parser')
for option in soup.find_all('option'):
    if option['value'] != '':
        result_dict[option.text] = option['value']

result_dict:

'2.5': '025', '3.5': '035', '4': '040', '4.5': '045', '5': '050', '5.5': '055', '6': '060', '6.5': '065', '7': '070', '7.5': '075', '8': '080', '8.5': '085', '9': '090'

【讨论】:

【参考方案3】:

你必须使用soup.find_all() 而不是soup.find()。 bs4 是最好的。

【讨论】:

以上是关于抓取更多标签值 bs4 和其他库的主要内容,如果未能解决你的问题,请参考以下文章

Beautifulsoup webscraping - 从 <a> 标签中提取值

使用 selenium 和 bs4 进行网页抓取

bs4查找标签属性值

bs4查找标签属性值

如何在带有 BS4 的 HTML 代码中找到这个通用标签(美丽的汤)

Python 爬虫--数据解析(bs4方法)