BeautifulSoup无法提取Product Description后文本的解决方法
Product Description文本爬取问题解答
核心结论:不需要提前提取目标文本前的所有p标签
你定位到的class="product_page"的article容器内,"Product Description"标题被包裹在id="product_description"的div标签中,对应的描述正文就是这个div的下一个相邻p标签,直接通过相邻节点定位即可拿到目标内容,遍历前置p标签属于冗余操作,还容易取到无关内容。
可直接复用的代码
基于你已编写的代码,补充以下逻辑即可完成提取:
import requests from bs4 import BeautifulSoup book_url = 'http://books.toscrape.com/catalogue/1000-places-to-see-before-you-die_1/index.html' response = requests.get(book_url) soup = BeautifulSoup(response.content, 'lxml') book_body = soup.find('article', class_='product_page') # 定位Product Description标题节点 desc_title = book_body.find('div', id='product_description') # 提取标题后紧邻的描述正文 product_desc = desc_title.find_next_sibling('p').get_text(strip=True)
写法优势
- 定位精准:不会误取描述板块前的商品宣传语、库存提示等无关p标签内容
- 效率更高:不需要遍历无关DOM节点
- 鲁棒性更强:只要描述板块「标题+相邻正文」的结构不变,页面其他位置的元素增减不会影响提取结果
异常兼容(可选)
针对部分无商品描述的书籍页面,可以加判空逻辑避免运行报错:
desc_title = book_body.find('div', id='product_description') product_desc = '暂无商品描述' if desc_title: desc_content_tag = desc_title.find_next_sibling('p') if desc_content_tag: product_desc = desc_content_tag.get_text(strip=True)
内容的提问来源于stack exchange,提问作者kruffer
相关产品推荐
相关产品推荐

