微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于从页面上的 html 中提取 javascript 变量的 Python 脚本

如何解决用于从页面上的 html 中提取 javascript 变量的 Python 脚本

我的网站页面标题中有以下 javascript:

<script type='text/javascript'>
var gaProperty = 'UA-00000000-1';
var disableStr = 'ga-disable-' + gaProperty;
if ( document.cookie.indexOf( disableStr + '=true' ) > -1 ) {
window[disableStr] = true;
}
function gaOptout() {
document.cookie = disableStr + '=true; expires=Thu,31 Dec 2099 23:59:59 UTC; path=/';
window[disableStr] = true;
}
</script>

我正在尝试使用 python 从 csv 文件中的 url 列表中的每个页面(即 UA-00000000-1)中提取 var gaProperty。我是 python 的新手,并从我看到的一些脚本中组合了一个脚本,但它不起作用:

from requests_html import HTMLSession
from urllib.request import urlopen
from bs4 import BeautifulSoup
import csv
import re

list = []
with open('list.csv','r') as csvf: # Open file in read mode
    urls = csv.reader(csvf)
    for url in urls:
        list.append(url) # Add each url to list contents
    

for url in list: 
    page = urlopen(url[0]).read()
    path = " ".join(url)
    soup = BeautifulSoup(page,"lxml")
    data = soup.find_all('script',type='text/javascript')
    gaid = re.search(r'UA-[0-9]+-[0-9]+',data[0].text)
    print(path,gaid)

我得到的错误结果是:

https:www.example.com/contact-us/ None

我需要为每个 url 实现所需的输出

https:www.example.com/contact-us/ UA-00000000-1

知道如何在 Python 中实现这一点吗?

解决方法

更具体地说,我会在模式中包含 var gaProperty,然后确保捕获组延迟捕获 ' 之间的所有内容,即包装 gaid 值。

import re

html ='''
<script type='text/javascript'>
var gaProperty = 'UA-00000000-1';
var disableStr = 'ga-disable-' + gaProperty;
if ( document.cookie.indexOf( disableStr + '=true' ) > -1 ) {
window[disableStr] = true;
}
function gaOptout() {
document.cookie = disableStr + '=true; expires=Thu,31 Dec 2099 23:59:59 UTC; path=/';
window[disableStr] = true;
}
</script>'''

gaid = re.search(r"var gaProperty = '(.*?)'",html).group(1)
print(f'https:www.example.com/contact-us/{gaid}')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。