python - 如何用python刮掉嵌套的标签元素
问题描述
嗨,我想获得一些位于 <del> 或 <ins> 标签下方的数据,但我找不到任何解决方案,任何人都可以了解这种抓取,是否有任何捷径可以获取这些信息
这是我的python代码
import requests
import json
from bs4 import BeautifulSoup
header = {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'}
base_url = "https://www.n11.com/super-firsatlar"
r = requests.get(base_url,headers=header)
if r.status_code == 200:
soup = BeautifulSoup(r.text, 'html.parser')
books = soup.find_all('li',attrs={"class":"column"})
result=[]
for book in books:
title=book.find('h3').text
link=base_url +book.find('a')['href']
picture = base_url + book.find('img')['src']
price = soup.find('a',attrs={"class":"ins"})
single ={'title':title,'link':link,'picture':picture,'price':price}
result.append(single)
with open('book.json','w', encoding='utf-8') as f:
json.dump(result ,f,indent=4,ensure_ascii=False)
else:
print(r.status_code)
<div class="proDetail">
<a href="https://test.com"class="oldPrice" title="Premium">
<del>69,00 TL</del></a>
<a href="https://test.com"class="newPrice" title="Premium">
<ins>14,90</ins>
</a>
</div>
这是我的输出
{
"title": "Premium",
"link": "https://test.com",
"picture": "https://pic.gif",
"price": null
},
解决方案
您正在寻找错误的课程。首先搜索“newPrice”类以获取a-block:
price = book.find('a', attrs={'class': 'newPrice'})
然后你可以在这个a 块中搜索ins 块,如:
price = book.find('a', attrs={'class': 'newPrice'}).find('ins')
然后您的结果将如下所示:
<ins>14,90</ins>
对于最终结果,去掉 html 标签:
price = book.find('a', attrs={'class': 'newPrice'}).find('ins').text.strip()
推荐阅读
- python - Python脚本中的SQL查询f字符串格式
- javascript - 引用 150 个名称相同但后面有数字的图像的点击事件
- laravel - 未捕获的 ReflectionException:/data/ 中不存在类配置
- node.js - 如何在 sequelize 中创建具有循环依赖性的双键?
- vue.js - 为什么即使使用 created 钩子更新了 vuex 存储,getter 也会返回 false?
- r - Shiny - 根据另一个选项卡中的输入更新一个选项卡中的用户选项
- android - 减少 React Native 中文本背景颜色的高度
- python-3.x - 密码重置时出现 NoReverseMatch 错误。该错误仅发生在远程服务器上,而不发生在本地服务器上
- docker - 如何在使用 gcloud 构建提交时将变量传递给 Dockerfile
- apache-spark - 无法对具有空值的数据帧进行计数