【问题标题】:search a var in script tag by bs4 & python通过 bs4 & python 在脚本标签中搜索 var
【发布时间】:2022-07-20 22:39:54
【问题描述】:
url = "www.xxxx.com"
rlink = requests.get(url, cookies=cookies).content
html = BeautifulSoup(rlink, 'html.parser')
scripttags = html.findAll("script")

在 html DOM 中,它会有大约 7x 个脚本标签,我需要在其中搜索一个变量(唯一) 每个脚本标签

变量是

var playbackUrl = 'https://www.yyyy.com'
for i in range(len(scripttags)):
    if "playbackUrl" in str(scripttags[i]):
        for j in str(scripttags[i]).split("\n"):
            if "playbackUrl" in j:
                url_=re.search("'(.*)'", j).group(1)
                print(url_)

虽然我的脚本可以完成这项工作,但是,只是想知道是否有任何聪明的方法来完成这项任务

【问题讨论】:

  • 发布你要抓取的网址
  • 不,它是一个视频购买网站,只是想通过一个搜索/循环来完成
  • 没有直接在脚本中搜索的方法 - 所以你必须使用for-loop 来单独检查每个脚本。
  • 如果您学会使用for-loop 而不使用range(len()) 和更高版本的[i] - for script in scripttags:,则代码可能更具可读性
  • 你不必拆分成行但使用re.findall("var playbackUrl = '(.*)'", script.text)

标签: python beautifulsoup python-re


【解决方案1】:

如果你学会在没有range(len())的情况下使用for-loop,代码的可读性会更高

而且你不必将它分成几行

from bs4 import BeautifulSoup

html = '''<script>
var other = 'test';
var playbackUrl = 'https://www.example1.com';
var next = 'test';
</script>

<script>
var other = 'test';
var playbackUrl = 'https://www.example2.com';
var next = 'test';
</script>
'''

import re

soup = BeautifulSoup(html, 'html.parser')
scripttags = soup.find_all("script")

for script in scripttags:
    
    results = re.search("var playbackUrl = '(.*)'", script.text)
    print('search:', results[1])
    
    # OR
    
    results = re.findall("var playbackUrl = '(.*)'", script.text)
    print('findall:', results[0])    

结果:

search: https://www.example1.com
findall: https://www.example1.com

search: https://www.example2.com
findall: https://www.example2.com

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2018-11-02
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多