【问题标题】:Python Scrapy Get HTML <script> tagPython Scrapy 获取 HTML <script> 标签
【发布时间】:2017-05-10 20:41:38
【问题描述】:

我有一个项目,我需要 html 代码中的 get 脚本。

        <script>
      (function() {
        ... / More Code
        Level.grade = "2";

        Level.level = "1";

        Level.max_line = "5";

        Level.cozum = 'adım 12\ndön sağ\nadım 13\ndön sol\nadım 11'; 
... / More Code
</script>

我如何只得到“adım 12\ndön sağ\nadım 13\ndön sol\nadım 11”这个代码?

感谢您的帮助

【问题讨论】:

  • 也许可以用beautifulsoup html解析器做到这一点

标签: python scrapy scrapy-spider


【解决方案1】:

使用正则表达式来做到这一点

首先抓取该 SCRIPT 标记的内容,例如

response.css("script").extract_first()

然后使用这个正则表达式

(Level\.cozum = )(.*?)(\;)

在此处查看演示 https://regex101.com/r/YxHRmR/1

这是代码

import re
regex = r"(Level\.cozum = )(.*?)(\;)"

test_str = ("<script>\n"
    "      (function() {\n"
    "        ... / More Code\n"
    "        Level.grade = \"2\";\n\n"
    "        Level.level = \"1\";\n\n"
    "        Level.max_line = \"5\";\n\n"
    "        Level.cozum = 'adım 12\\ndön sağ\\nadım 13\\ndön sol\\nadım 11'; \n"
    "... / More Code\n"
    "</script>")

matches = re.findall(regex, test_str, re.MULTILINE)

print(matches)

【讨论】:

  • 关于你的正则表达式,为什么不只是Level\.cozum = '(.*?)';? OP 显然只想要那里的变量值,那么为什么要 3 个捕获组呢?
猜你喜欢
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 2018-10-29
  • 2019-08-25
  • 1970-01-01
  • 2016-10-07
  • 1970-01-01
  • 2013-09-10
相关资源
最近更新 更多