运行Python网页爬虫代码仅输出0,无法抓取aspx页面文章信息怎么办?
问题排查与修复说明
核心疑问解答
.aspx后缀的站点不存在爬虫兼容性问题,它属于普通服务端渲染的web页面,和其他后缀的公共页面爬取逻辑没有差异,你的代码运行后仅输出0完全是代码逻辑错误导致的。
代码存在的具体问题
- 解析器选择错误:你参考RSS爬虫教程使用了
xml解析器,但当前目标页面是普通HTML格式,XML解析器无法正确识别HTML DOM结构,导致所有元素查找操作都返回空,这是你打印len(articles)输出0的直接原因。 - 元素查找规则错误:你代码中查找的
blog_section、blog_title等标签是RSS Feed特有的自定义标签,普通HTML页面不存在这类标签,需要先通过浏览器F12开发者工具查看目标站点的实际DOM结构,匹配正确的元素选择器。 - 逻辑BUG:
- 遍历文章列表的循环内第一时间执行了
return,即使前面逻辑正确也只能拿到第一条数据 - 往正在遍历的
articles列表中直接追加新元素,会触发无限遍历问题 - 连续写了多个
return语句,第一个return之后的代码永远不会执行
- 遍历文章列表的循环内第一时间执行了
修正后的参考代码
from bs4 import BeautifulSoup import requests url = 'https://tymeinc.com/newsroom/press-releases/default.aspx' def news(url): try: # 加请求头模拟浏览器,避免被站点反爬拦截 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' } r = requests.get(url, headers=headers) # 改用HTML解析器 soup = BeautifulSoup(r.text, features='html.parser') # 按当前目标页面实际DOM结构调整选择器 articles = soup.find_all('div', class_='module_item') print(f"找到文章总数:{len(articles)}") result = [] for a in articles: title = a.find('div', class_='blog_title').get_text(strip=True) link = 'https://tymeinc.com' + a.find('a')['href'] published = a.find('div', class_='module_date-time').get_text(strip=True) article = { 'blog_title': title, 'blog_link': link, 'module_date-time': published } result.append(article) # 遍历完成后统一输出结果 for item in result: print(item) return result except Exception as e: print('爬取失败,错误信息:', e) news(url)
内容的提问来源于stack exchange,提问作者Ashley Adams
相关产品推荐
相关产品推荐

