为了账号安全,请及时绑定邮箱和手机立即绑定

BeautifulSoup:解析 JavaScript 动态内容

BeautifulSoup:解析 JavaScript 动态内容

温温酱 2021-09-25 17:03:12
我正在开发一个带有 BeautifulSoup的 python 网络爬虫,它从这个网站解析“产品列表”并提取每个产品列表的一些信息(即价格、供应商等)。我能够提取许多此类信息,但只有一个(即产品数量),这似乎是从原始html 中隐藏的。通过浏览器查看网页,我看到的是(unid = 单位):product_name       1 unid      $10.00 但它的 html 没有显示任何我可以提取的整数值。它显示了这个 html 文本:<div class="e-col5 e-col5-offmktplace ">  <div class="kWlJn zYaQqZ gQvJw">&nbsp;</div>   <div class="imgnum-unid"> unid</div></div>我的问题是如何获取存储产品数量的隐藏内容e-col5?import reimport requestsfrom bs4 import BeautifulSouppage = 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 动态更新的内容。
查看完整描述

3 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

在unid保存在JS阵列


vetFiltro[0]=["e3724364",0,1,....];

这1是unid,你可以用正则表达式得到它


# e-col5

unitID = vendor[1].get('id').replace('line_', '') # line_e3724364 => e3724364

regEx = r'"%s",\d,(\d+)' % unitID

unit = re.search(regEx, page.text).group(1)

print(unit + ' unids')


查看完整回答
反对 回复 2021-09-25
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

如果你仔细看看,unid这只是一个 div 中的图像,由 a 移动class到正确的数字。


例如unid1:


.jLsXy {

    background-image: url(arquivos/up/comp/imgunid/files/img/181224lSfWip8i1lmcj2a520836c8932ewcn.jpg);

}

是包含数字的图像。


.gBpKxZ {

background-position: -424px -23px;

}

是数字 1 的类


因此,找到与该数字匹配的 css 并创建您的表格(简单的方法),但不是最好的方法。


编辑: 似乎每次重新加载时都会更改位置(类),因此更难将数字与图像匹配:(因此数字 1 可以从许多地方获取。


Edit2 我使用的是 chrome devtools。如果您检查 ,unid您也会找到css每个班级的 。所以在检查了 url 之后就很清楚了。


查看完整回答
反对 回复 2021-09-25
  • 3 回答
  • 0 关注
  • 490 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号