python - 使用 beautifulsoup 获取页面数
问题描述
我想获取下一个代码 html 中的页数:
<span id="viewns_Z7_AVEQAI930OBRD02JPMTPG21004_:form1:textfooterInfoNumPagMAQ" class="outputText marginLeft0punto5">1</span>
<span id="viewns_Z7_AVEQAI930OBRD02JPMTPG21004_:form1:textfooterInfoTotalPaginaMAQ" class="outputText marginLeft0punto5">37</span>
<span id="viewns_Z7_AVEQAI930OBRD02JPMTPG21004_:form1:textfooterTotalTotalMAQ" class="outputText marginLeft0punto5">736</span>
目标是获得数字 1、37 和 736
我的问题是我不知道如何定义提取数字的行,例如数字 1:
req = requests.get(url)
soup = BeautifulSoup(req.text, "lxml")
first_page = int(soup.find('span', {'id': 'viewns_Z7_AVEQAI930OBRD02JPMTPG21004_:form1:textfooterInfoNumPagMAQ'}).getText())
非常感谢
编辑:最后我找到了 Selenium 的解决方案:
numpag = int(driver.find_element_by_xpath('//*[@id="viewns_Z7_AVEQAI930OBRD02JPMTPG21004_:form1:textfooterInfoNumPagMAQ"]').text)
pagtotal = int(driver.find_element_by_xpath('//*[@id="viewns_Z7_AVEQAI930OBRD02JPMTPG21004_:form1:textfooterInfoTotalPaginaMAQ"]').text)
totaltotal = int(driver.find_element_by_xpath('//*[@id="viewns_Z7_AVEQAI930OBRD02JPMTPG21004_:form1:textfooterTotalTotalMAQ"]').text)
谢谢@abarnert,对不起我的问题,这是我的第一篇文章=)
解决方案
您提供的代码已经适用于您提供的示例。
我的猜测是您的问题是它不适用于任何其他页面,可能是因为这些id
值每次都不同。
如果是这种情况,您需要查看(或向我们展示)多个不同的输出,以确定是否有可识别的模式可以与正则表达式或充满字符串操作的函数或其他任何内容匹配。请参阅在文档中搜索树以了解您可以使用的不同类型的过滤器。
作为一个疯狂的猜测,Z7
每次AVEQAI930OBRD02JPMTPG21004
都被不同的大写和数字字符串替换,但格式的其余部分总是相同的?如果是这样,您可以使用一些非常明显的正则表达式:
rnumpag = re.compile(r'.*:form1:textfooterInfoNumPagMAQ')
rtotalpagina = re.compile(r'.*:form1:textfooterInfoTotalPaginaMAQ')
rtotaltotal = re.compile(r'.*:form1:textfooterTotalTotalMAQ')
numpag = int(soup.find('span', id=rnumpag).string)
totalpagina = int(soup.find('span', id=rtotalpagina).string)
totaltotal = int(soup.find('span', id=rtotaltotal).string)
这适用于您提供的示例,也适用于在我们匹配的部分中有不同字符串的不同页面.*
。
而且,即使我的疯狂猜测是错误的,这也应该向您展示如何为您实际需要搜索的任何内容编写搜索。
作为旁注,您使用的是未记录的遗留功能getText()
。这意味着您正在复制和粘贴古老的 BS3 代码。不要那样做。其中一些可以与 BS4 一起使用,即使它没有记录到(如本例中),但这仍然是一个坏主意。这就像在不了解差异的情况下尝试使用 Python 3 运行 Python 2 源代码。
您在这里想要的是get_text()
,string
或text
, 您应该查看文档中所有这三个的含义以了解区别 - 但在这里,标签中唯一的东西是文本字符串,所以它们都碰巧做了一样。
推荐阅读
- python - TFLite 转换不支持的操作:CropAndResize
- clion - 在 CLion 中导入非常大的 C 项目。(200k+ 标头)
- stm32 - 用于以太网/TCP-IP 的 STM32F3 文档
- python - 将我遇到的 Pandas 警告存储在变量中
- python - 如何修复我的定义以使用 return 语句正确结束,而不是以 print 结束?
- python - Python GTK ScrolledWindow 高度问题
- python-3.x - 通过所有列绘制直方图
- php - 我需要成为 abel 来过滤一张桌子,谁能告诉我怎么了
- plotly - 为 jupyter lab 安装 plotly-extension 时出错
- git - GitHub - 如何在 2 个 GitHub 存储库之间实时同步?