【问题标题】:ResultSet object has no attribute 'find_all'ResultSet 对象没有属性“find_all”
【发布时间】:2018-08-06 17:57:04
【问题描述】:

我在抓取一个网页时总是遇到一个问题。

AttributeError:ResultSet 对象没有“find”属性。您可能将项目列表视为单个项目。当你打算调用 find() 时,你调用了 find_all() 吗?

谁能告诉我如何解决这个问题?我的代码如下:

import requests  
r = requests.get('https://www.example.com')
from bs4 import BeautifulSoup  
soup = BeautifulSoup(r.text, 'html.parser')  
results = soup.find_all('div', attrs={'class':'product-item item-template-0 alternative'})
records = []  
for result in results:  
    name = results.find('div', attrs={'class':'name'}).text 
    price = results.find('div', attrs={'class':'price'}).text[13:-11]
    records.append((name, price,))

我想问一个很接近的问题。如果我想报废多个页面。像下面这样的模式,我使用下面的代码,但仍然只报废第一页你能解决这个问题吗?

import requests  
for i in range(100):   
    url = "https://www.example.com/a/a_{}.format(i)"
    r = requests.get(url)
from bs4 import BeautifulSoup  
soup = BeautifulSoup(r.text, 'html.parser')  
results = soup.find_all('div', attrs={'class':'product-item item-template-0 alternative'})

【问题讨论】:

标签: python attributeerror


【解决方案1】:

试试这个,删除 'results' 中的 's' 特别是 name = results

您的错误代码“name = results.find('div', attrs={'class':'name'}).text”

一改“name = result.find('div', attrs={'class':'name'}).text”

嗯,不错的尝试!

import requests  
r = requests.get('https://www.example.com')
from bs4 import BeautifulSoup  
soup = BeautifulSoup(r.text, 'html.parser')  
results = soup.find_all('div', attrs={'class':'product-item item-template-0 alternative'})
records = []  
for result in results:  
    name = result.find('div', attrs={'class':'name'}).text 
    price = result.find('div', attrs={'class':'price'}).text[13:-11]
    records.append((name, price,))

【讨论】:

    【解决方案2】:

    试试这个。你把结果和结果混在一起了:

    import requests  
    r = requests.get('https://www.example.com')
    from bs4 import BeautifulSoup  
    soup = BeautifulSoup(r.text, 'html.parser')  
    results = soup.find_all('div', attrs={'class':'product-item item-template-0 alternative'})
    records = []  
    for result in results:  
        name = result.find('div', attrs={'class':'name'}).text # result not results
        price = result.find('div', attrs={'class':'price'}).text[13:-11]
        records.append((name, price,))
    

    【讨论】:

    • 谢谢,它有效,只需将结果更改为结果。
    • 我想问一个很接近的问题。我想报废多页。example.com/a/a_1example.com/a/a_2example.com/a/a_3 -------。我使用如下代码,但仍然报废只有第一页 你能解决这个问题吗。import requests for i in range(100): url = "example.com/a/a_{}.format(i)" r = requests.get(url) from bs4 import BeautifulSoup soup = BeautifulSoup( r.text, 'html.parser') results = soup.find_all('div', attrs={'class':'product-item item-template-0 Alternative'})
    • 您应该为此发布另一个问题。为什么要循环 100 次?
    • 因为它有 100 页
    • 哦,我明白了。不是循环 100 次,而是循环浏览页面列表(必要时将其编入索引)。
    猜你喜欢
    • 1970-01-01
    • 2016-12-19
    • 2013-03-30
    • 2017-04-25
    • 1970-01-01
    • 2016-08-16
    • 2014-07-29
    • 2019-06-20
    • 1970-01-01
    相关资源
    最近更新 更多