python爬虫获取script标签中的var变量值
遇到问题:
资料调研过程中遇到js动态生成页面(在检查中可以看到需要爬取的数据,但是查看网页源代码中都是js动态生成,跟检查中的代码不一致),通过xpath在html中获取不到需要的数据,真正的数据在
所需要的数据为script中的var indData,数据类型为包含有许多dict的list
解决办法:
可以通过正则在script标签中截取数据,然后转化为json格式的数据。
代码如下:
#此处模拟获取到的html的text response_html_str = """ <!DOCTYPE html> <html> <head> </head> <body> <script> var indData = [{"No": 1, "Status": "A", "Date": "Dec 17, 2004 12:00:00 AM", "Desc": "Dealing in abc", "raCate": null}]; <!-- 后面接一大堆js函数,巴拉巴拉巴拉... --> function getResultsCount(){ return "1"; } </script> </body> </html> """ soup = BeautifulSoup(response_html_str, "html.parser") """ #compile中的正则 1."var indData ="表示我们需要开始截取的地方 2."(.*?)"表示中间为任意字符串 3.";$"表示第一个;结尾的地方结束 4."re.MULTILINE",影响^与$ 锚点匹配的位置。 没有开关,^并且$仅在整个文本的开头和结尾处匹配。使用该开关,它们也将在换行符之前或之后匹配 5."re.DOTALL",re.DOTALL,影响.模式可以匹配的内容。 如果没有切换,则.匹配除换行符之外的任何字符。通过该开关,换行符也将匹配 """ pattern = re.compile(r"var indData =(.*?);$", re.MULTILINE | re.DOTALL) script = soup.find('script', text=pattern) data_str = pattern.search(script.text).group(1) data_json = json.loads(data_str, strict=False)
结果如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2019-08-09 四种常见的 POST-------- content-type数据提交方式
2019-08-09 表单提交 multipart/form-data 和 x-www-form-urlencoded的区别
2019-08-09 postman中x-www-form-urlencoded与form-data的区别
2019-08-09 @RequestParam、@RequestBody和@ModelAttribute区别
2018-08-09 Android Studio gradle配置详解
2018-08-09 AS 中 Plugin for Gradle 和 Gradle 之间的版本对应关系
2018-08-09 AndroidStudio、gradle、buildToolsVersion关系