Python使用BeautifulSoup爬取plaque类元素无法提取内部文本是什么原因
问题根源
存在两个核心错误:
- 逻辑重复查找:你已经通过
cards.find_all(class_='plaque')拿到了所有plaque元素的列表cards_list,循环遍历的时候每个元素本身就是plaque节点,不需要再在节点内部二次查找class_='plaque'的子元素,二次查找找不到匹配内容自然返回None,调用.text属性就会报错。 - 语法&参数错误:
print(len(cards_list)缺少右括号,运行会直接触发语法报错;同时requests.get的入参需要带http/https协议头,否则会直接请求失败。
修正后代码
import requests from bs4 import BeautifulSoup # 采集页面 page = requests.get('http://www.somesite.com') # 补充协议头,请求才可以正常发送 print(page.status_code) # 建议先打印状态码,确认是200再继续解析,避免请求失败后解析空内容 soup = BeautifulSoup(page.text, 'html.parser') cards = soup.find(class_="content cardlisting small") cards_list = cards.find_all(class_='plaque') print(len(cards_list)) # 补充缺失的右括号 for plaque_item in cards_list: # 直接读取当前plaque节点的text属性即可,不需要二次查找 cards_name = plaque_item.text.strip() # strip()可去除首尾多余的空格、换行符 print(cards_name)
内容的提问来源于stack exchange,提问作者JNicholas76
相关产品推荐
相关产品推荐

