Javascript 使用BeautifulSoup解析HTML标记时,该标记显示为空,但在浏览器中打开时,该标记包含内容
我在通过BS4解析html页面时遇到问题。我在html页面中有一个隐藏的div,我想使用BeautifulSoup读取其中的内容。其内容由javascript函数动态生成,该函数通过body onload触发 问题是:当我在浏览器中调用页面时,标签包含了它应该包含的内容。当我通过BS4解析同一个页面时,标签是空的 我找不到任何关于BS4无法处理重载javascript生成内容的信息,因此不确定这里可能存在什么问题 Python脚本:Javascript 使用BeautifulSoup解析HTML标记时,该标记显示为空,但在浏览器中打开时,该标记包含内容,javascript,python,html,beautifulsoup,Javascript,Python,Html,Beautifulsoup,我在通过BS4解析html页面时遇到问题。我在html页面中有一个隐藏的div,我想使用BeautifulSoup读取其中的内容。其内容由javascript函数动态生成,该函数通过body onload触发 问题是:当我在浏览器中调用页面时,标签包含了它应该包含的内容。当我通过BS4解析同一个页面时,标签是空的 我找不到任何关于BS4无法处理重载javascript生成内容的信息,因此不确定这里可能存在什么问题 Python脚本: import urllib.request from bs4
import urllib.request
from bs4 import BeautifulSoup
import time
import datetime
eT = time.time()
version = 1
vNum = str(version)
t = datetime.datetime.now()
d = "0" + str(t.day)
#d = d.rstrip()
d = d[-2:]
m = "0" + str(t.month)
#m = m.rstrip()
m = m[-2:]
y = str(t.year)
dStr = y + m + d
resultFile = 'output/classAndIdList-' + dStr + '-v' + vNum + '.txt'
pageListFile = 'input/quickListFR.txt'
f = open(pageListFile, mode='r', encoding='utf-8')
urlRoot = 'http://dev.example.com/'
fOut = open(resultFile, 'w')
ciList = []
# for url in urls.split('\n'):
for l in f:
u = l.rstrip()
url = urlRoot + u
html_content = urllib.request.urlopen(url)
time.sleep(1)
html_text = html_content.read()
soup = BeautifulSoup(html_text)
ciTag = soup.find(id="testDivCSS")
print(ciTag)
ciString = ciTag.get_text()
# print(ciString)
ciArray = ciString.split(',')
# print(ciArray)
for c in ciArray:
if c not in ciList:
ciList.append(c)
fOut.write(c + '\n')
print(c)
print(u + '... DONE')
fOut.close()
通过BeautifulSoup的结果页面示例:
Example-page-1.html... DONE
<div id="testDivCSS" style="display: none;"> </div>
Example-page-1.html。。。完成
浏览器中的div(表示php和javascript部分工作正常):
div#菜单右上、div#社交、div#边栏、div#特定、div#菜单右下、div#页脚
BeautifulSoup无法通过javascript处理动态生成内容。
您可以先使用浏览器自动化工具(如selenium)帮助获取整个页面(包括动态部分),然后使用BeautifulSoup解析页面
关于这个问题:
<div id="testDivCSS" style="display: none;">div#menu_rightup,div#social,div#sidebar,div#specific,div#menu_rightdown,div#footer</div>