Python if语句不能处理已删除的web文本

Python if语句不能处理已删除的web文本,python,string,if-statement,beautifulsoup,Python,String,If Statement,Beautifulsoup,我知道这是一个相当普遍的问题,但这种情况使它成为一个令人困惑的问题 我正在使用beautifulsoup从网站上刮取某些数据,使用此功能,我还检查当前刮取的页面上的“下一页”链接,以查看是否可以刮取其他数据 next_page_button_finder = soup.find('ul', class_='navnext').text 为了检查结果,我使用以下方式打印: print(next_page_button_finder) 输出为: Next >> 然而,当我试图通过创

我知道这是一个相当普遍的问题,但这种情况使它成为一个令人困惑的问题

我正在使用beautifulsoup从网站上刮取某些数据,使用此功能,我还检查当前刮取的页面上的“下一页”链接,以查看是否可以刮取其他数据

next_page_button_finder = soup.find('ul', class_='navnext').text
为了检查结果,我使用以下方式打印:

print(next_page_button_finder)
输出为:

Next >>
然而,当我试图通过创建简单的if语句来验证这一点时,这是一个奇怪的部分:

    if next_page_button_finder == "Next >>":
        print("yes")
    else:
        print("no")
将打印“
否”

任何帮助都将不胜感激

以下是您可以用来复制问题的代码(spareroom.com上的任何链接都可以使用,但为了方便起见,您可以使用此链接):


我认为问题在于尾随空格。换句话说,字符串的开头或结尾处有一个空格字符。由于这个空格,字符串不相同,比较时将导致
False
语句(因为它们不相等)

您将变量与之进行比较的字符串是
“Next>>”
,但是您所说的变量存储的字符串是
“Next>>”
(此字符串末尾有一个空格)。因此,它们不相同,将导致
False

如何解决这个问题?如果使用
.strip()
方法,则会删除字符串周围的空白。如果您将代码更新为以下内容,它将起作用:

if next\u page\u button\u finder.strip()=“next>>”:
打印(“是”)
其他:
打印(“否”)

如果调试并在If语句处停止,您将看到文本实际上包含前后的换行符。您可以使用该字符串,或者只需事先使用
string.strip()

使用以下命令来剥离字符串:

print(list(next_page_button_finder))
我可以看到“
next\u page\u button\u finder
”str实际上在文本前后都有换行符:

['\n', 'N', 'e', 'x', 't', ' ', '>', '>', '\n']
因此我将if语句改为:

if next_page_button_finder == "\nNext >>\n":
    print("yes")
else:
    print("no")
现在它打印:

yes
或者,我可以编写一行代码:

next_page_button_finder = next_page_button_finder.strip()

去掉换行符和原始代码就可以了。

更好的方法可能是简单地消除文本中可能出现的变化,并简单地使用其id(实际元素的id,而不是当前目标的父元素的id)测试html中是否存在“按钮”。id还允许更快的匹配,该测试应该更可靠

import requests
from bs4 import BeautifulSoup as bs
  
links = ['https://www.spareroom.co.uk/flatshare/?search_id=1034984872&',
         'https://www.spareroom.co.uk/flatshare/?offset=10&search_id=1034984872&sort_by=age&mode=list',
         'https://www.spareroom.co.uk/flatshare/?offset=410&search_id=1034984872&sort_by=age&mode=list']

with requests.Session() as s:
    for link in links:
        r = s.get(link)
        soup = bs(r.content, 'lxml')
        next_page = soup.select_one('#paginationNextPageLink')
        if not next_page is None:
            print('Yes')
        else:
            print('No. Last page.')
    

我的猜测是,您可能在某个地方遗漏了一个空格,您可以尝试使用
列表(下一页按钮查找器)
并打印出来。如果您在打印中添加*,您将看到更多字符。现在你可以脱掉多余的衣服了。试试这个
print(“*”,next\u page\u button\u finder,“*”)如果next\u page\u button\u finder.strip()=“next>>”:
他给了两个链接use@Matiiss谢谢你的帮助。我还编辑了我的答案以包含更多信息。你的意思是
.strip()
我认为这样会更好吗here@Matiiss是的,谢谢你的提醒。使用
.strip()
会更容易
import requests
from bs4 import BeautifulSoup as bs
  
links = ['https://www.spareroom.co.uk/flatshare/?search_id=1034984872&',
         'https://www.spareroom.co.uk/flatshare/?offset=10&search_id=1034984872&sort_by=age&mode=list',
         'https://www.spareroom.co.uk/flatshare/?offset=410&search_id=1034984872&sort_by=age&mode=list']

with requests.Session() as s:
    for link in links:
        r = s.get(link)
        soup = bs(r.content, 'lxml')
        next_page = soup.select_one('#paginationNextPageLink')
        if not next_page is None:
            print('Yes')
        else:
            print('No. Last page.')