bs获取一个标签出现的次数
时间: 2023-02-07 08:45:27 浏览: 104
可以使用 Beautiful Soup 库的 `find_all()` 函数来获取一个标签在网页中出现的次数。
举个例子,假如你想获取一个网页中所有段落标签 `<p>` 的出现次数,你可以这样做:
```python
import requests
from bs4 import BeautifulSoup
url = 'http://www.example.com'
# 获取网页内容
response = requests.get(url)
html = response.text
# 使用 Beautiful Soup 解析网页
soup = BeautifulSoup(html, 'html.parser')
# 获取所有段落标签 <p> 的出现次数
p_tags = soup.find_all('p')
p_count = len(p_tags)
print(f'段落标签 <p> 在网页中出现了 {p_count} 次')
```
希望这能帮到你!
相关问题
统计古诗文网页上各种体裁的唐诗数量。唐诗三百首网页链接为 https://so.gushiwen.cn/gushi/tangshi.aspx 提示:统计页面唐诗数量,即统计HTML代码中标签<span>出现的次数,使用find_all函数统计标签。
好的,您想让我使用爬虫技术对古诗文网页进行统计,对吗?
首先需要导入需要的库:
```python
import requests
from bs4 import BeautifulSoup
```
然后使用requests库获取页面的HTML代码,并用BeautifulSoup解析HTML代码:
```python
url = 'https://so.gushiwen.cn/gushi/tangshi.aspx'
html = requests.get(url).content
soup = BeautifulSoup(html, "html.parser")
```
通过观察源代码可以发现,唐诗都是用`<span>`标签包裹的,因此我们可以使用find_all函数来找到所有的`<span>`标签:
```python
spans = soup.find_all('span')
```
然后我们可以对`spans`列表进行遍历,找到唐诗的标识,统计数量即可:
```python
count = 0
for span in spans:
if 'shtml' in span.get('onclick', ''):
count += 1
print('唐诗数量为:%d' % count)
```
这样就可以统计出唐诗的数量了。注意,由于古诗文网的反爬虫机制比较强,如果爬取频率过高可能会被封禁IP。建议在使用时注意合理设置爬虫的访问频率,或者使用其他手段获取网站数据。
# 划分区间 bins = [0,1,2,3,4,5,10,15,20,25,30,35,40,45,50,60,70,80,90,100,1220] data = data_forecast_is_stk_bs_rpt_zq_befor_big['本年比上一年归母倍数'] # 统计每个柱子的数据 hist, edges = pd.cut(data, bins=bins, right=False, include_lowest=True, retbins=True) counts = hist.value_counts() # 按照 hist 的顺序重新排序 counts counts = counts.reindex(hist.cat.categories) # 按照 bins 的顺序给每个柱子指定标签 labels = counts.index.astype(str) fig, ax = plt.subplots(figsize=(18, 6)) # 绘制柱形图 plt.bar(labels, counts) # 添加数据标签 for i, v in enumerate(counts.values): plt.text(i, v, str(v), ha='center', va='bottom') # 设置图表标题和坐标轴标签 plt.title('准确数据-本年小于前一年归母倍数') plt.xlabel('Range') plt.ylabel('Count') # 显示图表 plt.show() # 划分区间 bins1 = [0,1,2,3,4,5,10,15,20,25,30,35,40,45,50,60,70,80,90,100,1220] data1 = data_forecast_is_stk_bs_rpt_cw_befor_big['本年比上一年归母倍数'] # 统计每个柱子的数据 hist1, edges1 = pd.cut(data1, bins=bins1, right=False, include_lowest=True, retbins=True) counts1 = hist1.value_counts() # 按照 hist 的顺序重新排序 counts counts1 = counts1.reindex(hist.cat.categories) # 按照 bins 的顺序给每个柱子指定标签 labels1 = counts1.index.astype(str) fig1, ax1 = plt.subplots(figsize=(18, 6)) # 绘制柱形图 plt.bar(labels, counts) # 添加数据标签 for i, v in enumerate(counts.values): plt.text(i, v, str(v), ha='center', va='bottom') # 设置图表标题和坐标轴标签 plt.title('准确数据-本年小于前一年归母倍数') plt.xlabel('Range') plt.ylabel('Count') # 显示图表 plt.show() 把这2个柱形图做成1个对比柱形图
可以使用 Matplotlib 中的 subplots() 方法创建一个含有两个子图的 Figure 对象,然后在每个子图上分别绘制对应的柱形图,最后使用 tight_layout() 方法调整子图的位置和间距。
以下是可能的代码实现:
```python
import pandas as pd
import matplotlib.pyplot as plt
# 划分区间
bins = [0, 1, 2, 3, 4, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 60, 70, 80, 90, 100, 1220]
# 获取数据
data1 = data_forecast_is_stk_bs_rpt_zq_befor_big['本年比上一年归母倍数']
data2 = data_forecast_is_stk_bs_rpt_cw_befor_big['本年比上一年归母倍数']
# 统计每个柱子的数据
hist1, edges1 = pd.cut(data1, bins=bins, right=False, include_lowest=True, retbins=True)
hist2, edges2 = pd.cut(data2, bins=bins, right=False, include_lowest=True, retbins=True)
counts1 = hist1.value_counts()
counts2 = hist2.value_counts()
# 按照 bins 的顺序给每个柱子指定标签
labels = counts1.index.astype(str)
# 创建 Figure 对象和两个子图对象
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(18, 6))
# 在第一个子图上绘制柱形图
ax1.bar(labels, counts1)
for i, v in enumerate(counts1.values):
ax1.text(i, v, str(v), ha='center', va='bottom')
ax1.set_title('准确数据-本年小于前一年归母倍数(证券)')
ax1.set_xlabel('Range')
ax1.set_ylabel('Count')
# 在第二个子图上绘制柱形图
ax2.bar(labels, counts2)
for i, v in enumerate(counts2.values):
ax2.text(i, v, str(v), ha='center', va='bottom')
ax2.set_title('准确数据-本年小于前一年归母倍数(财务)')
ax2.set_xlabel('Range')
ax2.set_ylabel('Count')
# 调整子图的位置和间距
fig.tight_layout()
# 显示图表
plt.show()
```
该代码将会生成一个包含两个子图的对比柱形图,其中左侧子图表示证券数据,右侧子图表示财务数据,它们均基于相同的标签和区间划分。每个子图的 x 轴表示数据范围,y 轴表示相应区间内数据出现的次数,每个柱子的高度表示该区间内的数据数量。同时,在每个柱子上方标注了对应的数据数量。
阅读全文