遇到问题:
资料调研过程中遇到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)
结果如下:
标签:script,python,indData,re,html,str,var From: https://www.cnblogs.com/Im-Victor/p/17616890.html