python小小白哟 发表于 2023-6-24 17:03:59

python中生成器对象没有属性find

# -*- coding: utf-8 -*-

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:
    # 电影名称
    name = item.find('a > h2').text()
    file.write(f'名称:{name}\n')
    # 类别
    categories =
    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()

运行后就报错了:
Traceback (most recent call last):
File "E:\python\pythonProject\save_data.py", line 18, in <module>
    categories =
AttributeError: 'generator' object has no attribute 'find'

请问怎么解决这个错误报告呢?在线等。

青出于蓝 发表于 2023-6-24 17:09:29

根据提供的代码和错误信息,问题出现在 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 =
    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 库。如果还有其他问题,请随时提问。
页: [1]
查看完整版本: python中生成器对象没有属性find