python - 从标签内部获取信息 - BeautifulSoup4 (Python 3)
问题描述
我的代码目前正在从网页中的表格中提取信息,但它只返回标签之间的值。有人可以帮我从该代码产生的标签中获取电子邮件和名称吗?
emails = []
membership_url = 'http://url/members?letter=a'
print(membership_url)
member_page = s.get(membership_url)
soup = BeautifulSoup(member_page.content, 'html5lib')
members = soup.findAll("table")[4]
tds = members.findAll("td")
print(tds)
样品输出:
<td><a href="../../options/johndoe--at--gmail.com">johndoe@gmail.com</a><br/><input name="johndoe%40gmail.com_realname" size="24" type="TEXT" value="John Doe"/><input name="user" type="HIDDEN" value="johndoe%40gmail.com"/></td>
我对 bs4 或 HTML 了解不多,所以很幸运我能走到这一步。理想情况下,我想同时提取 johndoe@gmail.com 和真名“John Doe”。我现在能得到的只是标签之间的电子邮件。
解决方案
在没有看到 html 的其余部分的情况下,bs4 4.7.1 + 可能会查找两个相邻input
的标签,其中相邻的标签name
具有 value 的属性user
。您的里程可能会因完整的 html 而异。+ 是相邻的兄弟组合子。
from bs4 import BeautifulSoup as bs
import requests
import urllib.parse
s = '<td><a href="../../options/johndoe--at--gmail.com">johndoe@gmail.com</a><br/><input name="johndoe%40gmail.com_realname" size="24" type="TEXT" value="John Doe"/><input name="user" type="HIDDEN" value="johndoe%40gmail.com"/></td>'
soup = bs(s)
node = soup.select_one('input:has(+input[name=user])')
print(node['value'], ' ' ,urllib.parse.unquote(node['name']))
推荐阅读
- php - 传递给 App\Http\Controllers\HomeController::productDetail() 的参数 2 必须是 App\Product 的实例,给定字符串
- dart - 如何在 Flutter 中读写文本文件
- javascript - Youtube 视频自动播放不适用于 iphone 设备中的 chrome
- information-retrieval - 文本分析与文本挖掘
- objective-c - [super Init] 的返回对象
- machine-learning - `Check failed: cudnnSetTensorNdDescriptor` 使用预训练的 Keras 模型进行迁移学习时
- git - Jenkins 基于从 git 中选择的分支构建
- android - 网络意图 url 自动修改
- java - 将 JAR 文件作为依赖项添加到项目中,而无需其相关 JAR
- android - 如何在android studio中构建apk文件?