python - 网页抓取文章得到 AttributeError: 'str' object has no attribute 'text'
问题描述
我正在尝试从中提取所有文章的标题、链接、日期atlasobscura.com
。
一开始我是在requests + parsel + xpath中编写代码的。(结果没有错误)
但这次我使用 BeautifulSoup 重新编写代码,我得到了AttributeError: 'str' object has no attribute 'text'
.
回溯(最后一次调用):文件“E:\Python\Atlasobscura.com_2.py”,第 21 行,在 href = 'https://www.atlasobscura.com' + str(s.find('div') .find('a')['href'].text) AttributeError: 'str' object has no attribute 'text'
如果有人能解决这个问题。
请帮我。
谢谢!
这是代码:
import requests
from bs4 import BeautifulSoup
import pandas as pd
title = []
link = []
date = []
for x in range(1, 662):
print(f'=====> Scraping from page {x}')
url = f'https://www.atlasobscura.com/articles?page={x}'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
r = requests.get(url, headers=headers)
r.encoding = r.apparent_encoding
soup = BeautifulSoup(r.text, 'lxml')
articles = soup.find_all('div', class_='col-md-4 col-sm-6 col-xs-12')
for s in articles:
story = s.find('div', class_='content-card-text').find('h3').find('span').text
title.append(story)
href = 'https://www.atlasobscura.com' + str(s.find('div').find('a')['href'].text)
link.append(href)
m_d_y = s.find('div', class_='detail-sm article-card-detail article-card-date').text.strip()
date.append(m_d_y)
print(story, href, m_d_y)
atlasobscura = pd.DataFrame({
'Title': title,
'Link': link,
'Date': date
})
atlasobscura.to_excel('Atlasobscura.com.xlsx', index=False)
解决方案
根据 Traceback,问题就在这里
str(s.find('div').find('a')['href'].text)
s
是一个网页元素。应用find()
它会给出另一个网络元素所以在应用之后
s.find('div').find('a')
我们有一些网络元素。现在我们应用['href']
它,这给出了href
该 web 元素的属性值。所以
s.find('div').find('a')['href']
返回一些字符串。
我们不能.text
对字符串应用方法。
这就是错误所说的。
因此,您应该简单地删除.text
那里,将其保留为:
href = 'https://www.atlasobscura.com' + str(s.find('div').find('a')['href'])
.text
方法可以应用于 Web 元素对象以获取其文本值。
推荐阅读
- php - PHP 全局函数
- javascript - 如何知道 FlatList 的最后一项
- python - 使用 BeautifulSoup 查找自定义 HTML 标记
- api - 使用 API 调用从 kibana/elasticsearch 下载 PDF 报告
- facebook - 在 API 和应用程序中使用 Whatsapp Business API 编号
- python - 当迭代 for 循环与运行一次时,代码会产生不同的结果
- azure - Azure CDN 从后端获取数据
- deep-learning - 为什么 MSE 损失比分类交叉熵更适用于多类分类问题?
- github - 使用私钥/公钥对将 Netbeans 连接到 gitHub 时出现问题
- c# - 来自 intPtr 的 for 循环,如何?