为何soup.find_all()仅返回单个结果?网页爬取技术问询
问题分析与解决
原因1:循环逻辑错误,仅输出最后一个元素
你的代码里,info = (Title, location, Price)和print(info)写在循环外部。不管循环遍历多少个result,最终只会输出最后一次循环赋值的变量值,看起来就像只拿到了单个元素。
修复方法:把打印逻辑移到循环内部,遍历一个结果就输出一个:
for result in results: Title = result.find('div', class_= "similar-listings-info").text.replace('\n','') location = result.find( class_= "listings-location").text.replace('\n','') Price = result.find('div', class_= "similar-listings-price").text.replace('\n','') info = (Title, location, Price) print(info)
原因2:页面中符合双class条件的元素确实只有一个
检查页面静态源码(可以用print(page.text)查看),确认是否存在多个同时拥有similar-listings-item和sponsored-listing两个class的div元素。如果页面本身只有一个这类元素,find_all自然只会返回一个结果。
原因3:页面内容动态加载,静态请求无法获取全部数据
如果网站通过JavaScript动态加载更多房源,requests.get()只能获取页面初始加载的静态内容,后续加载的元素不会出现在page.content里。这种情况需要用Selenium等工具模拟浏览器加载动态内容。
内容的提问来源于stack exchange,提问作者Franklin Ekwem
相关产品推荐
相关产品推荐

