关于Python爬虫解析器未在终端输出电影标题的问题求助
嘿,我来帮你排查下问题!这种爬取不到内容的情况,大概率是两个核心原因导致的,咱们一步步拆解解决:
1. 网站反爬机制拦截了你的请求
默认情况下,requests.get()发送的请求里,User-Agent标识是python-requests/xx.x.x,很多网站会直接识别出这是爬虫请求,返回空页面或反爬提示页,导致BeautifulSoup根本找不到你要的电影标题元素。
解决方法:添加模拟浏览器的请求头
给请求加上浏览器的User-Agent,让网站误以为是正常用户访问:
from bs4 import BeautifulSoup import requests url = 'https://www.kinoafisha.info/rating/movies/2022/' # 模拟Chrome浏览器的请求头,你也可以换成其他浏览器的标识 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' } response = requests.get(url, headers=headers) # 先做基础验证:确认请求成功,页面内容正常 print(f"请求状态码:{response.status_code}") print(f"返回页面字符长度:{len(response.text)}") soup = BeautifulSoup(response.text, 'html.parser') films = soup.find_all('div', class_='movieItem_title') for film in films: print(film.text.strip())
运行后先看状态码是否为200(表示请求成功),页面字符长度如果是几千甚至上万就是正常的;如果只有几百字符,说明还是被反爬拦截了,可能需要进一步添加其他请求头(比如Accept-Language)。
2. 页面元素结构已更新
有时候网站会迭代页面布局,你用的movieItem_title类名可能已经被替换了。
解决方法:手动确认当前页面的元素结构
打开目标页面,按F12调出开发者工具,用元素选择器点击任意电影标题,查看它的父容器和自身的class名称。比如现在打开这个页面,电影标题的class可能已经变成了ratingItem_title,这时候需要把代码里的选择器改成对应的新类名。
你也可以用更灵活的方式提取:先找到所有电影条目容器,再从中提取标题,比如:
movie_items = soup.find_all('div', class_='ratingItem') for item in movie_items: title_tag = item.find('div', class_='ratingItem_title') # 替换成你查到的实际class if title_tag: print(title_tag.text.strip())
额外验证小技巧
如果还是不确定问题在哪,可以把返回的页面内容保存到本地查看:
with open('page.html', 'w', encoding='utf-8') as f: f.write(response.text)
打开生成的page.html文件,看看里面有没有电影标题——如果没有,说明请求到的内容不对;如果有,就是你的选择器写错了。
按照上面的步骤排查,应该就能解决电影标题无法显示的问题啦!
内容的提问来源于stack exchange,提问作者DISSRIAR

