Python 使用beautifulsoup获取页面数

Python 使用beautifulsoup获取页面数,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我想获得下一个html代码中的页数: <span id="viewns_Z7_AVEQAI930OBRD02JPMTPG21004_:form1:textfooterInfoNumPagMAQ" class="outputText marginLeft0punto5">1</span> <span id="viewns_Z7_AVEQAI930OBRD02JPMTPG21004_:form1:textfooterInfoTotalPaginaMAQ" class=

我想获得下一个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>
非常感谢

编辑:最后我找到了一个含硒的解决方案:

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,对不起我问题中的CAO,这是我的第一篇文章=)

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

我猜您的问题是它不适用于任何其他页面,可能是因为那些
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
,您应该查看文档中这三个词的含义,以了解它们之间的区别,但在这里,标签中唯一的东西是文本字符串,所以他们都做了同样的事情。

使用
soup。找到所有的
,然后在
结果集上迭代。
您给出的代码与您给出的示例一致。(虽然您不应该使用仅用于BS3兼容性的未记录的遗留
getText
方法;只需使用
text
属性即可。)那么……这里有什么问题吗?这个例子的问题是它可以工作,但在下次获取新页面时不起作用,因为那些ID是自动生成的还是什么?如果是这样,你需要在你的问题中解释这一点。(答案可能是使用正则表达式匹配或函数匹配,而不是
id
的字符串匹配,但在我确定正则表达式或函数应该是什么之前,您需要向我们展示一个与现有代码不兼容的不同示例。)很抱歉,终端中的错误是:first_page=int(soup.find('span'),{'id':'viewns_Z7_AVEQAI930OBRD02JPMTPG21004.\u:form1:textfooterInfoNumPagMAQ'}).getText()AttributeError:'NoneType'对象没有属性'getText'@Davicholo首先,将其编辑到问题中,不要将其粘贴为注释。其次,您的问题中的示例没有得到该属性,因此您需要给我们一个实际重现错误的示例。请阅读帮助。
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)