Python网页爬取:如何将div内容转为纯文本并解决NoneType错误
解决爬取class为element的div中价格文本的问题
核心问题分析
- 使用
__str__得到方法绑定信息:大概率是错误调用了方法(比如写了price_div.__str__而非price_div.__str__()或str(price_div)),但这种方式会返回整个元素的HTML字符串,并非纯价格文本。 .text触发AttributeError: 'NoneType' object has no attribute 'text':说明find()/find_all()没有找到目标div元素,返回了None。
分步解决方案
1. 基础爬取代码(静态网页)
先确保请求成功且元素定位正确:
import requests from bs4 import BeautifulSoup # 替换为目标网页URL target_url = "https://example.com" # 添加请求头模拟浏览器,避免被反爬 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } response = requests.get(target_url, headers=headers) if response.status_code == 200: soup = BeautifulSoup(response.text, "html.parser") # 注意用class_而非class,避免和Python关键字冲突 price_element = soup.find("div", class_="element") if price_element: # 提取纯文本并清理多余空白字符 clean_price = price_element.text.strip() print(clean_price) # 输出如Rp 88.000 else: print("未找到class为element的div元素,请检查网页结构或class名称") else: print(f"请求失败,状态码:{response.status_code}")
2. 常见问题排查
- class名称错误:检查网页源码中目标div的class是否确实是
element,如果是多类名(如element price),需用列表传入:soup.find("div", class_=["element", "price"]) - 反爬拦截:网站可能拒绝爬虫请求,添加
headers(如User-Agent、Referer)可解决大部分基础反爬 - 动态渲染内容:如果价格是通过JavaScript加载的,requests无法获取到动态生成的内容,此时需要用Selenium模拟浏览器:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.get(target_url) try: # 定位目标元素 price_element = driver.find_element(By.CLASS_NAME, "element") clean_price = price_element.text.strip() print(clean_price) finally: driver.quit()
内容的提问来源于stack exchange,提问作者Rezky RVL
相关产品推荐
相关产品推荐

