如何用Python3提取HTML源码中document.getElementById的括号内内容?
Python3提取HTML文档中特定JS代码的括号内容(以DuckDuckGo为例)
我想使用Python3从HTML文档里提取特定内容,以DuckDuckGo(https://duckduckgo.com)为例,需要定位到类似var error=document.getElementById("error_homepage");这样的代码,提取括号里的内容(也就是"error_homepage")。目前我写了初始代码,但不知道怎么完成提取逻辑:
import urllib.request u = input ('Please enter URL: ') x = urllib.request.urlopen(u) print(x.read())
嘿,这事儿用正则表达式就能轻松搞定,我给你调整下代码,一步步来解释:
- 解码响应内容:
urlopen.read()返回的是字节流,得先解码成字符串才能处理; - 匹配目标模式:用正则匹配
document.getElementById("xxx")这种结构,把括号里的内容作为捕获组; - 处理匹配结果:判断是否找到匹配项,再提取对应的内容。
改进后的完整代码:
import urllib.request import re # 获取输入URL u = input('Please enter URL: ') # 发起请求并解码内容 response = urllib.request.urlopen(u) html_content = response.read().decode('utf-8') # 定义正则表达式:匹配document.getElementById("xxx")的结构,捕获引号内的内容 pattern = re.compile(r'document\.getElementById\("([^"]+)"\)') # 查找所有匹配项 matches = pattern.findall(html_content) # 处理结果 if matches: print("提取到的内容:") for item in matches: print(item) else: print("未找到匹配的内容")
补充说明:
- 正则表达式里的
([^"]+)表示捕获所有非引号的字符,确保只提取括号内引号包裹的内容; - 如果目标代码里用的是单引号,把正则里的双引号改成单引号就行:
r'document\.getElementById\('([^']+)'\)'; - 要是你只需要第一个匹配结果,用
pattern.search(html_content)替代findall,然后通过match.group(1)获取内容。
内容的提问来源于stack exchange,提问作者Jake
相关产品推荐
相关产品推荐

