python - Python BeautifulSoup 'NavigableString' 对象没有属性 'get_text'
问题描述
这可能看起来很简单,但是我无法让它工作。最近刚开始学习爬虫,遇到了这个问题。尝试了 python REPL 中的代码,它似乎可以工作,但是不知道为什么当我编码它时,它不会工作。
这是我下面的代码。所以我要做的是为我的程序提取文章标题、链接和图片,这就是我下面的内容。
from urllib.request import urlopen
from bs4 import BeautifulSoup
import requests
import json
beauty_result=[]
def scrape_b2():
soup = BeautifulSoup(urlopen('https://www.instyle.com/beauty'), 'lxml')
url = 'https://www.instyle.com'
for article in soup.find_all('article',class_='component tile media image-top type-article'):
for img in article.find_all('div',class_='component lazy-image thumbnail'):
for a in article.find('h3'):
beauty_result.append(json.dumps({
'title':a.get_text(strip=True),
'link':url+article.find('a')['href'],
'image':img.get('data-src')
}))
print(beauty_result)
if __name__ == '__main__':
scrape_b2()
这是我得到的错误的整个追溯:
D:\Coding\Python\webscrape env>python app.py
Traceback (most recent call last):
File "app.py", line 37, in <module> scrape_b2()
File "app.py", line 28, in scrape_b2 'title':a.get_text(strip=True),
File "D:\Coding\Tools\Anaconda3\envs\webscraper_practice\lib\site-packages\bs4\element.py", line 742, in getattr self.__class__.__name__, attr))
AttributeError: 'NavigableString' object has no attribute 'get_text'
这就是我解决的方法:
def scrape_b2():
soup = BeautifulSoup(urlopen('https://www.instyle.com/beauty'), 'lxml')
url = 'https://www.instyle.com'
for article in soup.find_all('article',class_='component tile media image-top type-article'):
for img in article.find_all('div',class_='component lazy-image thumbnail'):
h3 = article.find('h3')
a_link = h3.find('a')
beauty_result.append(json.dumps({
'title': a_link.get_text(strip=True),
'link': url + a_link.get('href'),
'image': img.get('data-src')
}))
print(beauty_result)
解决方案
您的错误是因为您不能使用get_text()
特定于 Bs4 对象的方法。
你可以做的是:
h3 = article.find('h3')
a_link = h3.find('a')
beauty_result.append(json.dumps({
'title': a_link.get_text(strip=True),
'link': url + a_link.get('href'),
'image': img.get('data-src')
}))
前面的代码替换循环for a in article.find('h3'):
推荐阅读
- ansible - 有没有办法在 Ansible 中显示已注册的处理程序或侦听器?
- rendering - 我们可以根据到相机的距离来控制 Viewer 中的渐进式渲染吗?
- java - 线程在终止之前不会输出流
- c++ - 使用 g++ 编译包含根库的 c++
- javascript - 节点获取映射错误 - 无法读取未定义的属性“映射””
- javascript - 如何点击div下的元素?
- r - 使用单个函数生成表格和绘制比例
- python - 在 python 中显示最小/最大输入。得到 TypeError:'int"
- swift - SwiftUI 使用按钮更改视图
- excel - 数组分配适用于 ThisWorkbook 模块,但不适用于 Sheet1 模块