我正在用BeautifulSoup开发一个python webscraper,它解析来自this网站的“产品列表”,并提取每个产品列表的一些信息(即价格、供应商等)。 我能够从原始html中提取许多信息,但只有一个信息(即产品数量)似乎是隐藏的。通过我的浏览器查看网页,我看到的是(unid=单位):
product_name 1 unid $10.00
但是它的html没有显示我可以提取的任何整数值。它显示以下html文本:
<div class="e-col5 e-col5-offmktplace ">
<div class="kWlJn zYaQqZ gQvJw"> </div>
<div class="imgnum-unid"> unid</div>
</div>
我的问题是如何将存储产品数量的e-col5
的内容隐藏起来
import re
import requests
from bs4 import BeautifulSoup
page = requests.get("https://ligamagic.com.br/?view=cards%2Fsearch&card=Hapatra%2C+Vizier+of+Poisons")
soup = BeautifulSoup(page.content, 'html.parser')
vendor = soup.find_all('div', class_="estoque-linha", mp="2")
print(vendor[1].find(class_='e-col1').find('img')['title'])
print(vendor[1].find(class_='e-col2').find_all(class_='ed-simb')[1].string)
print(vendor[1].find(class_='e-col5'))
编辑:隐藏内容在本例中代表JavasSript动态更新的内容
@ewlink找到了退出
unid
的方法,但无法退出价格。我试图从这个答案中找出价格目标div代码段:
如果我们仔细观察,我们可以
输出[截断]:
它提取主要的块,我们会得到价格。 但这也会跳过多个项目
为了获得所有数据,我们可以使用OCR API和Selenium来实现这一点。我们可以使用以下代码片段捕获感兴趣的元素:
从https://stackoverflow.com/a/15870708获得帮助
我们可以像上面那样使用
re.findall()
来保存所有图像。获得所有图像后,我们可以使用OCR空间提取文本数据。下面是一个简短的片段:1.png:
来自ocr.space的JSON响应:
它给我们,
"ParsedText" : "RS 0',85 \r\n"
如果仔细看一下,
unid
只是div中的一个图像,由class
移动到正确的数字例如
unid
1:是包含数字的图像
是数字1的类
因此,找到与数字匹配的css并创建表(简单方法),但不是最好的方法
编辑: 似乎每次重新加载时都会更改位置(类),因此更难将数字与图像匹配:(因此数字1可以从许多地方获取)
Edit2 我用的是chrome开发工具。 如果您检查
unid
,您也会发现每个类的css
。 因此,在检查了url之后,它是清晰的unid
保存在JS数组中1
是unid,您可以使用regex获得它相关问题 更多 >
编程相关推荐