python - 在html页面中使用re模块搜索字符串

标签 python regex full-text-search web-scraping

我有一个带有 javascript 的 html 页面 html中有一些js代码:

<script type="text/javascript">
    var viewAllLimiter = 0;
</script>

如何找到 viewAllLimiter 并通过 re.search 获取其值?

我已经尝试过:

#hh2 - opened page with urllib2
re.search('var viewAllLimite = "(\w)"', hh2)

我需要如下输出:

var viewAllLimiter = 0;

或者我知道的任何其他我看到 viewAllLimiter 参数值的内容

最佳答案

实现此目的的一种方法是使用 re.findall 方法和组。这将返回一个列表,其中包含您的组作为成员。另外,如果您想将大于 9 的数字与正则表达式匹配,则需要在\w 之后添加一个“+”。另外,如果您确定该值始终是数字,最好使用\d+。

re.findall( r'(viewAllLimiter =) (\w+)', txt )

这将返回

[('viewAllLimiter =', '0')]

对于你的例子,但也会返回

[('viewAllLimiter =', '9924')]

如果该值是一个更大的数字。请注意列表内的元组。这是因为每个模式匹配都会得到一个元组,并且元组中的每一项都是您的组之一。使用正则表达式时要记住的最后一件事是,使用 raw strings 将为您省去很多麻烦。 (前导引号前面的r)。

要匹配更通用的变量类,您可以使用以下正则表达式,

re.findall( r"""\s*(CATEGORY_ID)\s*=\s*((?:'|")?\w+(?:'|")?)""", txt )

只要您将要搜索的变量名称放在正则表达式的开头,它就会捕获引号(或不引号)中的任何内容。请注意,这会返回引号和值,例如 [('SKU', '"GRP05133"')]。如果您只想要该值,可以将第二组紧紧围绕 \w+ 部分。

re.findall( r"""\s*(CATEGORY_ID)\s*=\s*(?:'|")?(\w+)(?:'|")?""", txt )

如果我们分解这个正则表达式,它会显示:

"""
\s*       # zero or more white spaces
(xxx)     # the variable you're looking for
\s*       # zero or more white spaces
=         # an equal sign
\s*       # zero or more white space
(?:'|")?  # zero or one ' or " but non-capturing (i.e. don't store in group output)
(\w+)     # the value of the variable
(?:'|")?  # zero or one single quote OR zero or one double quote
"""

关于python - 在html页面中使用re模块搜索字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24775708/

相关文章:

Mysql全文返回NULL

php - MySQL MATCH AGAINST 3 个字符表达式

python - 在 PyPi 上管理公司帐户

python - 使用 python 将文件加载到 Azure 文件存储

python - 在 python 中使用多个不互斥的 If

Java Replaceall 忽略大小写和特殊字符

ruby - 如何使用 Sequel gem 将 full_text_search 与 unaccent 结合起来?

python - 为什么这个 if 和 elif 语句没有完全执行?

java - 具有可变组数的正则表达式?

php - 使用正则表达式 (PCRE) 匹配 a^n b^n c^n (例如 "aaabbbccc")