基础web scraper循环重复输出第一条条目问题求助
问题根因
- 你调用
find()方法拿到的players是单个父级div容器,不是所有球员条目集合,直接遍历该对象只会拿到它的各类子节点,包含大量无效的文本、空白节点。 - 循环内你始终调用父容器
players的h3.a.text,取的永远是父容器下第一个h3标签的内容,没有用到循环变量,自然只会重复打印同一个名字。
修正后可运行代码
from bs4 import BeautifulSoup import requests # 添加请求头,避免被网站反爬拦截 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' } html_text = requests.get( 'https://www.pff.com/news/nfl-quarterback-rankings-all-32-starters-ahead-of-the-2021-nfl-season', headers=headers ).text soup = BeautifulSoup(html_text, 'lxml') # 先定位内容父容器 content = soup.find('div', class_='m-longform-copy') # 直接提取父容器下所有h3标签,每个h3对应一名球员 player_h3_list = content.find_all('h3') for h3 in player_h3_list: # 增加判断过滤没有a标签的h3,避免运行报错 if h3.a: print(h3.a.text)
补充说明
如果后续需要提取球员的其他关联信息,也可以基于每个h3标签,查找它的相邻同级节点获取排名、评分、评价内容等数据。
内容的提问来源于stack exchange,提问作者anthonyaxe
相关产品推荐
相关产品推荐

