per*_*alt 5 python regex xpath
下面的代码下载一个网页,查找和元素,然后运行一个正则表达式来解析字符串中的一个数字。它似乎适用于我的 python 3.7 测试系统,但不适用于我的 python 3.5。我正在下载网页,使用 Xpath 查找文本块。xpath 返回类似 'International (21)' 或 'Books (99)' 的内容,我想提取数字,即 21 或 99。
在 python 3.5 中,我返回“ TypeError: '_sre.SRE_Match' object is not subscriptable.'
我不相信错误是版本的差异,但这是唯一已知的差异。xpath 似乎正在工作,因为它返回 ' <_sre.SRE_Match 对象;span=(14, 18), match='(21)'>'当我打印 CountObj 时。
我应该为 python 3.5 做一些调整,有没有更好的方法来编码?
driver = webdriver.Chrome()
driver.get(url); #Download the URL passed from mysql
CatAndCount = driver.find_element_by_xpath('//h2 [@class="searchResultsTitle"]').text
# the above line returns with a name and value like 'International (21)'
CountObj = re.search("\((.*?)\)",CatAndCount) # look for the number, 21 in example
print (CountObj) # for testing
CountVal=CountObj[1]
Run Code Online (Sandbox Code Playgroud)
您需要使用捕获的组数作为参数调用group()方法re.MatchObject来获取该方法(整个匹配为空白或 0)。因此,要获得第一个捕获的组:
CountObj.group(1)
Run Code Online (Sandbox Code Playgroud)
编辑:
如果您有多个捕获的组,并且想要全部,则使用groups()方法将它们作为元组获取,例如:
CountObj.groups()
Run Code Online (Sandbox Code Playgroud)
或者,如果您想要特定的,例如第 1 个和第 4 个捕获的组,请使用group()如下所示获取所询问的元组:
CountObj.group(1, 4)
Run Code Online (Sandbox Code Playgroud)