python - Python Web-scraping - 嵌套标签
问题描述
我正在尝试从以下页面获取信息
http://books.toscrape.com/
我想获得每本书的评分(星级),我使用了下面的代码
import requests
from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
response = requests.get(
'http://books.toscrape.com/')
if response.status_code == 200:
print('Requisição bem sucedida!')
linhas = soup.find_all(class_=re.compile("rating"))
但随之而来的是
<p class="star-rating Three">
<i class="icon-star"></i>
<i class="icon-star"></i>
<i class="icon-star"></i>
<i class="icon-star"></i>
<i class="icon-star"></i>
</p>,
我究竟做错了什么 ?
解决方案
实际上 class-name 包含星值,因此我们可以使用attrs['class']
mehtod 提取或d['class'][1]
也可以!
import requests
from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
response = requests.get(
'http://books.toscrape.com/')
soup=BeautifulSoup(response.text,"html.parser")
data=soup.find_all("p",class_="star-rating")
for d in data:
print(d.attrs['class'][1])
输出:
Three
One
One
Four
..
推荐阅读
- model-view-controller - 如何从控制器读取温度值到局部视图。我要返回 JSON,我还可以返回部分视图吗?
- java - 不在不同线程中重新评估昂贵的数据
- android - 关于如何在 Android 中将图像调整为目标文件大小的另一种方法
- java - 无法在 android studio 中运行视频文件
- mysql - MySQL 中具有特定范围的 MAX() 的语法
- python - 如果我的应用不在服务器上运行,我可以使用 OAuth 吗?
- traceback - Idk 为什么会发生 unboundlocalerror
- angular - Firestore 监听器订阅触发随机次数
- next.js - 从 NextJS 中的 api 路由中获取数据而不暴露给客户端
- r - 将 n 个列表组合成 2 列标题