BeautifulSoup爬取无数据返回:为何无法找到目标元素?
问题原因及解决方法
核心错误
你代码里的soup.findAll('item')是在查找名为<item>的HTML标签,但目标元素都是<div>标签,item只是它们的class属性值,不是标签名,所以找不到任何元素。
正确的查找方式
根据你的需求,分场景给出对应写法:
1. 只找class严格为item的div元素(对应前两个元素)
# 方法1:使用class_参数(class是Python关键字,需加下划线) result = soup.find_all('div', class_='item') # 方法2:使用CSS选择器 result = soup.select('div.item')
2. 找所有class包含item的div元素(包括item和item-alt,对应三个元素)
# 方法1:用正则匹配class属性 import re result = soup.find_all('div', class_=re.compile(r'item')) # 方法2:用CSS选择器的包含匹配 result = soup.select('div[class*="item"]')
3. 先定位容器再查找元素
如果目标元素都在class为section的div容器内,也可以先锁定容器再查找内部元素:
section = soup.find('div', class_='section') result = section.find_all('div')
额外提示
findAll是BeautifulSoup的旧版方法,官方推荐使用find_all。- 如果页面是JavaScript动态渲染的内容,
urllib.request.urlopen只能获取静态HTML,这时候需要用selenium或playwright这类工具加载动态内容后再解析,但你确认页面上存在这些元素,先按上述静态解析方法调整即可。
内容的提问来源于stack exchange,提问作者Grismar
相关产品推荐
相关产品推荐

