程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了if 语句不适用于抓取的网络文本大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决if 语句不适用于抓取的网络文本?

开发过程中遇到if 语句不适用于抓取的网络文本的问题如何解决?下面主要结合日常开发的经验,给出你关于if 语句不适用于抓取的网络文本的解决方法建议,希望对你解决if 语句不适用于抓取的网络文本有所启发或帮助;

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

我正在使用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")

no”被打印出来。

任何帮助将不胜感激。

这是您可以用来复制问题的代码(来自spareroom.com 的任何链接都可以使用,但是,为了您的方便,您可以使用此链接https://www.spareroom.co.uk/flatshare/?search_id=1034984872&):

from bs4 import BeautifulSoup
import requests

HTML_address = input("Paste page the address here:")

HTML_text = requests.get(HTML_address).text

soup = BeautifulSoup(HTML_text,'lxml')
prices = soup.find_all('strong',class_='LisTingPrice')

next_page_button_finder = soup.find('ul',class_='navnext').text

print(next_page_button_finder)

if next_page_button_finder == "Next >>":
    print("yes")
else:
    print("no")

解决方法

if 语句不适用于抓取的网络文本

如果调试并停在 if 语句处,您将看到文本前后实际上包含换行符。您可以使用该字符串,或者简单地使用 String.Strip()

预先去除您的字符串 ,

更好的方法可能是简单地消除文本变化的可能性,并使用其 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.')
    
,

我认为问题来自尾随空格。换句话说,字符串的开头或本例中的结尾有一个空格字符。由于这个空间,字符串是不相同的,当比较时,将产生一个 false 语句(因为它们不相等)。

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

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

if next_page_button_finder.Strip() == "Next >>":
    print("yes")
else:
    print("no")
,

使用:

print(list(next_page_button_finder))

我能够看到 "next_page_button_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()

去掉换行符,原始代码就可以正常工作了。

大佬总结

以上是大佬教程为你收集整理的if 语句不适用于抓取的网络文本全部内容,希望文章能够帮你解决if 语句不适用于抓取的网络文本所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。