BeautifulSoup:解析 JavaScript 动态内容

我正在开发一个带有 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 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 动态更新的内容。


温温酱
浏览 491回答 3
3回答

喵喵时光机

在unid保存在JS阵列vetFiltro[0]=["e3724364",0,1,....];这1是unid,你可以用正则表达式得到它# e-col5unitID = vendor[1].get('id').replace('line_', '') # line_e3724364 => e3724364regEx = r'"%s",\d,(\d+)' % unitIDunit = re.search(regEx, page.text).group(1)print(unit + ' unids')

蝴蝶不菲

如果你仔细看看,unid这只是一个 div 中的图像,由 a 移动class到正确的数字。例如unid1:.jLsXy {&nbsp; &nbsp; 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 之后就很清楚了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python