为什么AttributeError:'bytes'对象没有属性'findAll'

时间:2019-09-28 08:49:09

标签: python xpath beautifulsoup findall

我正在尝试从趋势页面中删除youtube数据。出现错误

from bs4 import BeautifulSoup
import requests
import csv

source = requests.get("https://www.youtube.com/feed/trending").text
soup = BeautifulSoup(source, 'lxml').encode("utf-8")

csv_file = open('YouTube.csv','w')
csv_writer = csv.writer(csv_file)
csv_writer.writerow(['Title', 'Description'])

for content in soup.findAll('div', class_= "yt-lockup-content"):
#for content in soup.find_all('div', class_= "yt-lockup-content"):
    print (content)

1 个答案:

答案 0 :(得分:1)

AttributeError:“字节”对象没有属性“ findAll” 是因为在代码中您正在执行以下操作:

    public static Exam load(String filename) throws IOException, ClassNotFoundException {

        Exam result = null;
        try (ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(filename)))) {
            result = (Exam) ois.readObject();
        }
        if (result != null) {
            result.setGradeCount(new HashMap<>());
            for (StudentGrade grade : result.getGrades()) {
                Integer count = result.getGradeCount().get(grade.getGrade());
                if (count == null) {
                    count = 1;
                } else {
                    count++;
                }
                result.getGradeCount().put(grade.getGrade(), count);
            }
        }
        return result;
    }
}

正在发生的事情是,您正在通过编码字符串将 str 转换为 byte 编码用于使用选择的编码将 str 转换为字节

永远不要在程序中使用 bytes 来操作。而是使用unicode sandwitch原理。读取时将 bytes 转换为 str ,用 str 进行处理,然后将 str 转换为 bytes 写入输出。

因此,只需在程序内部使用 str ,而不要使用 bytes

soup = BeautifulSoup(source, 'lxml').encode("utf-8")