【发布时间】:2021-04-08 17:09:37
【问题描述】:
这里是初学者。
我刚刚开始学习 Python,并且正在学习网络爬虫,我想抓取每个段落,然后将它们写入文本文件或 csv 文件。每个段落都有相同的标签名称,所以我认为 for 循环会遍历该名称的每个标签并从每个标签和中提琴中获取文本!...除了它只显示第一段 15 次以上..我假设它这样做的原因是因为它像我告诉它的那样抓取第一个标签,并为与它同名的许多其他标签打印相同的标签。我尝试将 .find 替换为 .find_all 但出现属性错误。如何获取所有段落而不仅仅是一个?
文章:https://www.huffpost.com/entry/angry-squirrel-attacks-queens_n_5fee30b1c5b6ec8ae0b242d2
from bs4 import BeautifulSoup
import requests
import csv
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
}
url = "https://www.huffpost.com/entry/angry-squirrel-attacks-queens_n_5fee30b1c5b6ec8ae0b242d2"
response = requests.get(url, headers=headers).text
soup = BeautifulSoup(response, 'lxml')
article = soup.find('article')
headline = article.header.h1.text
print(headline)
headline_Sub = article.find('div', class_="headline__subtitle").text
print(headline_Sub)
print('')
for summaries in article.find('div', class_="entry__text js-entry-text yr-entry-text"):
p = article.find('div', class_='content-list-component yr-content-list-text text').p.text
print(p)
使用 find_all 的 for 循环反而会返回错误:
Traceback(最近一次调用最后一次):文件 "C:\Users\Denze\MyPythonScripts\Webscraping learning\Webscrape article.py”,第 27 行,在 p = article.find_all('div', class_='content-list-component yr-content-list-text text').p.text 文件 "C:\Users\Denze\AppData\Local\Programs\Python\Python39\lib\site-packages\bs4\element.py", 第 2173 行,在 getattr 中 raise AttributeError(AttributeError: ResultSet object has no attribute 'p'. 你可能将元素列表视为 单个元素。当你打算调用 find() 时,你调用了 find_all() 吗?
【问题讨论】:
-
完整发布错误。虽然我怀疑这是因为您没有将
.find_all()的结果视为可迭代对象。 -
好的,我已经在我的帖子中添加了错误消息,我很想知道为什么我会收到这个错误..
-
是的,
.find_all()返回一个集合,您将其视为单个元素。事实上,这个错误在最后几句话中准确地告诉了你。 -
刚开始编程,所以我仍然对所有术语的含义有些困惑,但感谢您的洞察力。
标签: html python-3.x beautifulsoup