根据提供的代码和错误信息,问题出现在 categories 的部分。根据错误提示,'generator' object has no attribute 'find',说明在 items.find('.categories button span').items() 这一行代码中,items 是一个生成器(generator)对象,并没有 find 方法。
问题的原因在于 items 是通过 doc('.el-card').items() 获取的一个生成器对象,而不是 PyQuery 对象。因此,在 items 迭代的过程中,你不能再使用 items.find() 进行查找。
解决这个问题的方法是将每个 item 转换为 PyQuery 对象,然后再使用 find() 方法进行查找。下面是修正后的代码:
import requests
from pyquery import PyQuery as pq
import re
url = 'https://ssr1.scrape.center/'
html = requests.get(url).text
doc = pq(html)
items = doc('.el-card').items()
file = open('movie.txt','w',encoding='utf-8')
for item in items:
item = pq(item) # 将item转换为PyQuery对象
# 电影名称
name = item.find('a > h2').text()
file.write(f'名称:{name}\n')
# 类别
categories = [cat.text() for cat in item.find('.categories button span').items()]
file.write(f'类别:{categories}\n')
# 上映时间
published_at = item.find('.info:contains(上映)').text()
published_at = re.search('(\d{4}-\d{2}-\d{2})',published_at).group(1) \
if published_at and re.search('\d{4}-\d{2}-\d{2}',published_at) else None
file.write(f'上映时间:{published_at}\n')
# 评分
score = item.find('p.score').text()
file.write(f'评分:{score}\n')
file.write(f'{"=" * 50}\n')
file.close()
在修正后的代码中,我添加了 item = pq(item) 这一行,将每个 item 转换为 PyQuery 对象。然后,可以使用 item.find() 方法查找对应的元素。
请尝试使用修正后的代码,并确保已经安装了 requests 和 pyquery 库。如果还有其他问题,请随时提问。 |