使用beautifulsoup获取页面数

2024-10-04 03:27:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我想得到下一个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())

非常感谢

编辑:我终于找到了含硒的解决方案:

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,对不起我的问题,这是我的第一个帖子=)


Tags: textiddriver数字findclassintspan
1条回答
网友
1楼 · 发布于 2024-10-04 03:27:49

您提供的代码已经适用于您提供的示例

我猜您的问题是,它不适用于任何其他页面,可能是因为这些id值每次都不同

如果是这样的话,您需要查看(或向我们展示)多个不同的输出,以确定是否有一个可识别的模式,您可以与正则表达式或充满字符串操作的函数或其他什么匹配。请参阅文档中的Searching the tree,了解可以使用的不同类型的过滤器


大概是Z7AVEQAI930OBRD02JPMTPG21004每次都被不同的大写和数字字符串所取代,但其余的格式总是一样的?如果是这样,您可以使用一些非常明显的正则表达式:

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一起工作,即使没有文档记录(如本例中),但这仍然是一个坏主意。这就像试图用python3运行python2源代码,而不了解它们之间的区别

这里您想要的是get_text()stringtext,您应该看看这三者在文档中的含义,以了解它们之间的区别,但是在这里,标记中唯一的东西是文本字符串,所以它们恰好做了相同的事情

相关问题 更多 >