大佬教程收集整理的这篇文章主要介绍了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 语句处,您将看到文本前后实际上包含换行符。您可以使用该字符串,或者简单地使用 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,请注明来意。