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)
复制代码

结果如下:

 

 

posted @   mingruqi  阅读(662)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .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关系
点击右上角即可分享
微信分享提示