通过BS4解析html页面时遇到问题。我在html页面中有一个隐藏的div,我想用BeautifulSoup读取内容。其内容由javascript函数动态生成,该函数通过body onload触发。
问题是:当我在浏览器中调用该页面时,该标记具有应该具有的内容。当我通过BS4解析同一页面时,标签为空。
我找不到任何有关BS4无法处理onload javascript生成内容的信息,所以不确定这里可能出现的问题。
Python脚本:
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>
浏览器中的div(表示php和javascript部分工作正常):
<div id="testDivCSS" style="display: none;">div#menu_rightup,div#social,div#sidebar,div#specific,div#menu_rightdown,div#footer</div>
答案 0 :(得分:2)
BeautifulSoup无法通过javascript处理动态生成内容。 您可以使用浏览器自动化工具(例如selenium)来帮助获取整个页面(包括动态部分),然后使用BeautifulSoup来解析页面。
参考这个问题: How to retrieve the values of dynamic html content using Python