python - 如何使用 BeautifulSoup 进行更改和更新源代码
问题描述
soup=BeautifulSoup(page,'html.parser')
result=soup.find('div',attrs={'class':'entry-text my-2 px-2 px-sm-4'}).text
print(soup.prettify())
n=list(d.values())[0]
print(n)
result=n
soup.find('div',attrs={'class':'entry-text my-2 px-2 px-sm-4'}).text=result
#print(soup.prettify())
我收到如下错误:
soup.find('div',attrs={'class':'entry-text my-2 px-2 px-sm-4'}).text=result
64 #print(soup.prettify())
**AttributeError: can't set attribute**
基本上我想对源代码进行一些更改,然后用更新的源代码更新 url
有可能吗?
解决方案
我想你想做这样的事情来替换字符串元素:
soup=BeautifulSoup(page,'html.parser')
result=soup.find('div',attrs={'class':'entry-text my-2 px-2 px-sm-4'}).text
print(soup.prettify())
n=list(d.values())[0]
print(n)
result=n
ele = soup.find('div',attrs={'class':'entry-text my-2 px-2 px-sm-4'}).findChildren()[-1]
ele.string.replace_with(n)
#print(soup.prettify())
示例 1:
from bs4 import BeautifulSoup
d = {0:'Bar',2:'Baz',3:'Qux'}
page = """
<div class="entry-text my-2 px-2 px-sm-4">Foo</a>
"""
soup=BeautifulSoup(page,'html.parser')
result=soup.find('div',attrs={'class':'entry-text my-2 px-2 px-sm-4'}).text
print(soup.prettify())
n=list(d.values())[0]
#print(n)
result=n
ele = soup.find('div',attrs={'class':'entry-text my-2 px-2 px-sm-4'})
ele.string.replace_with(n)
print(soup.prettify())
输出:
<div class="entry-text my-2 px-2 px-sm-4">
Foo
</div>
<div class="entry-text my-2 px-2 px-sm-4">
Bar
</div>
示例 2:
ele.string
这将在返回时引发该错误,None
因为下面有多个标签,<article>
因此无法获取.string
属性
from bs4 import BeautifulSoup
d = {0:'Bar',2:'Baz',3:'Qux'}
page = """
<article> <div><p>Hello</p></div> </article>
"""
soup=BeautifulSoup(page,'html.parser')
result=soup.find('article').text
print(soup.prettify())
n=list(d.values())[0]
#print(n)
result=n
ele = soup.find('article')
ele.string.replace_with(n)
print(soup.prettify())
但这将起作用,因为ele.string
返回' Hello '
from bs4 import BeautifulSoup
d = {0:'Bar',2:'Baz',3:'Qux'}
page = """
<article> <div><p>Hello</p></div> </article>
"""
soup=BeautifulSoup(page,'html.parser')
result=soup.find('article').text
print(soup.prettify())
n=list(d.values())[0]
#print(n)
result=n
ele = soup.find('p')
ele.string.replace_with(n)
print(soup.prettify())
最后,您可以使用.findChildren()
, 来访问该端节点。
推荐阅读
- go - gopls 替换整个项目中的变量
- mysql - { 错误:在 Connection._handleConnectTimeout 处连接 ETIMEDOUT 和奇怪的未定义消息
- javascript - Mongoose .env 返回未定义
- python - Cythonize error: failed with exit status 2. numpy and pyvista
- python - 如何重新排列长文本文件中的行?
- python - discord.py 在新线程中使用机器人的方法
- slingr - 使用 SLINGR 的多租户架构
- c++ - 获取活动 CDocument 的文件图标
- kubernetes - 在 Openshift 上部署和公开微服务
- c++ - 如何在 C++ 中将浮点值存储在数组中