【发布时间】:2021-10-22 02:24:01
【问题描述】:
我正在尝试解析一些 HTML 以查找 RegEx。当我使用在线工具来验证我的正则表达式时,它可以正常工作。它找到了价值。但是,当我将 BeautifulSoup 与 RegEx 一起使用时,模式无法找到表达式。
我正在寻找这些数据:/some/path/to/file?accountTransactionID=f2448439-ec25-4a61-a6f4-4c6fa0767f19&accountNumber=123456&searchValue=ABC123&isActiveHistory=True
从这一行开始:
var url = '/some/path/to/file?accountTransactionID=f2448439-ec25-4a61-a6f4-4c6fa0767f19&accountNumber=123456&searchValue=ABC123&isActiveHistory=True'
在下面的演示 html 中。
这是我正在使用的 Python 脚本。我已经使用了几个 SO 问题,包括这个 one,但没有成功。
如果我使用soup = BeautifulSoup(fp, 'html.parser').find_all(string=PATTERN),那么脚本的全文已存储在一个数组中。我尝试循环遍历数组以再次查找文本,但它总是空的。
我做错了什么?
Python:
FILE_PATH = os.getcwd() + '/demo.html'
PATTERN = re.compile('var url = \'(.*?)\'')
with open(FILE_PATH) as fp:
soup = BeautifulSoup(fp, 'html.parser') # .find_all(string=PATTERN)
data = PATTERN.match(str(soup))
print(f'Data: {data}')
# for script in soup:
# print(script)
# data = PATTERN.match(str(script))
# if data is not None:
# print(f'Data: {data}')
# else:
# print('NO DATA FOUND')
输出:数据:无
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<script src="/some/path/1"></script>
<script src="/some/path/2"></script>
<script src="/some/path/31"></script>
</head>
<body>
<script type="text/javascript">
function downloadFile() {
var readyToDownload = 'f2448439-ec25-4a61-a6f4-4c6fa0767f19';
if (readyToDownload !== '')
{
var url = '/some/path/to/file?accountTransactionID=f2448439-ec25-4a61-a6f4-4c6fa0767f19&accountNumber=123456&searchValue=ABC123&isActiveHistory=True'
url = url.replace(/&/g, "&")
window.open(url, '_blank');
}
}
</script>
</body>
</html>
【问题讨论】:
标签: python regex web-scraping beautifulsoup