Traceback (most recent call last): File "D:\Project\exp\q.py", line 19, in <module> info = url.find('p', {'class': ''}).get_text().strip() ^^^^^^^^ File "C:\Users\Chen\AppData\Local\Programs\Python\Python311\Lib\site-packages\bs4\element.py", line 2428, in __getattr__ raise AttributeError( AttributeError: ResultSet object has no attribute 'find'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?
时间: 2023-09-11 11:12:28 浏览: 528
这个错误提示的意思是你把一个 ResultSet 对象当作单个元素来使用了,而 ResultSet 对象是由多个元素组成的列表,它不支持 `find` 方法。
你可以使用 `find_all` 方法来查找所有符合条件的元素,然后再对每个元素进行操作。例如:
```
from bs4 import BeautifulSoup
import requests
url = 'https://movie.douban.com/subject/1292052/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 提取电影信息
info = soup.find_all('div', {'class': 'subject clearfix'})[0].find_all('div', {'class': 'bd'})[0].find_all('p')[0].get_text().strip()
director = info.split('导演: ')[1].split(' ')[0]
starring = info.split('主演: ')[1].split(' / ')[0]
types = info.split('\xa0/\xa0')[1].strip()
year = info.split('\n')[2].strip()
# 提取评分
rating = soup.find_all('strong', {'class': 'll rating_num'})[0].get_text()
# 打印结果
print('导演:', director)
print('主演:', starring)
print('类型:', types)
print('上映时间:', year)
print('评分:', rating)
```
这段代码会输出电影的导演、主演、类型、上映时间和评分。注意电影信息的提取方式可能随着 HTML 结构的变化而变化,你需要根据实际情况进行调整。
阅读全文