python - Python 多页网页仅抓取文本
问题描述
我是 python 新手。我目前正在研究网络抓取。任务是抓取戴尔社区 Inspiron 问题的前 5 页。我有代码可以运行并返回我需要的信息。但是,我无法仅获取文本。我当前的代码返回文本+ html。我尝试将 .text 放置在代码的各个点,但这样做时只会出错。
最常见的错误是:“AttributeError: ResultSet object has no attribute 'text'。您可能将项目列表视为单个项目。当您打算调用 find() 时是否调用了 find_all()?”
下面是我的代码:
from urllib.request import urlopen
from bs4 import BeautifulSoup
import os, csv
from time import sleep
pages = ['https://www.dell.com/community/Inspiron/bd-p/Inspiron',
'https://www.dell.com/community/Inspiron/bd-p/Inspiron/page/2',
'https://www.dell.com/community/Inspiron/bd-p/Inspiron/page/3',
'https://www.dell.com/community/Inspiron/bd-p/Inspiron/page/4',
'https://www.dell.com/community/Inspiron/bd-p/Inspiron/page/5'
]
import requests
data = []
for page in pages:
r = requests.get(page)
soup = BeautifulSoup(r.content, 'html.parser')
rows = soup.select('tbody tr')
for row in rows:
d = dict()
d['title'] = soup.find_all ('a', attrs = {'class': 'page-link lia-link-navigation lia-custom-event'})
d['author'] = soup.find_all ('span', attrs = {'class': 'login-bold'})
d['time'] = soup.find_all ('span', attrs = {'class': 'local-time'})
d['kudos'] = soup.find_all ('div', attrs = {'class': 'lia-component-messages-column-message-kudos-count'})
d['messages'] = soup.find_all ('div', attrs = {'class': 'lia-component-messages-column-message-replies-count'})
d['views'] = soup.find_all ('div', attrs = {'class': 'lia-component-messages-column-topic-views-count'})
d['solved'] = soup.find_all ('td', attrs = {'aria-label': 'triangletop lia-data-cell-secondary lia-data-cell-icon'})
d['latest']= soup.find_all ('span', attrs = {'cssclass': 'lia-info-area-item'})
data.append(d)
sleep(10)
print(data[0])
任何帮助是极大的赞赏。谢谢!
解决方案
find_all
返回一个html 元素列表。如果您希望打印每个元素的文本,您需要遍历您使用创建的每个列表,find_all
然后将该.text
方法应用于每个单独的条目。例如:
titles = soup.find_all ('a', attrs = {'class': 'page-link lia-link-navigation lia-custom-event'})
for title in titles:
print(title.text())
推荐阅读
- pyomo - 如何从 Pyomo 检索约束值
- popper.js - 使用 popper.js 隐藏和取消隐藏文本
- terraform - 使用地图查找将 Terraform 插值到 var
- javascript - Jquery MultiSelect Dropdown 无法正确处理来自 Ajax 调用的数据
- ruby - 在 Windows 10 上安装 Ruby 2.3.2
- c# - 连接到 Azure 文件存储上的 SQLite 数据库
- javascript - 无法匹配任何路由。角度误差?
- python - 如何对列表中的元素进行分组?
- python - 如何在 Matplotlib 中使用 Latex 正确编写“<”和“>”符号
- android - 如何强制 FileBackupAgent 运行?