python怎么抓取渲染后的页面
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python怎么抓取渲染后的页面相关的知识,希望对你有一定的参考价值。
应该是没法抓取渲染后的页面。因为渲染这个工作是浏览器完成的。而你通过python脚本抓取到的内容仅仅是html、css、js等源码。
对于一些需要js异步加载的内容获取,通常是先获取相关源码,然后参考js源码,利用python伪造一个请求(带上所需的参数)再向服务器获取一次内容。
动态内容的爬取,也是爬虫面临的一个比较大的难题。很多动态请求 事实上并不是那么容易伪造的。 参考技术A 目前我知道的有两种方法,一种是使用selenium框架,另一种是用phantomjs.
前者,是一个自动化测试框架,有一个webdriver类,运行的时候它会打开一个浏览器,就像你正常浏览网页一样。
后者,相当于一个无界面的浏览器,它会帮你渲染界面,可以获取到渲染后的页面以及执行脚本。
具体使用方法,可以上网搜搜,网上很多的。 参考技术B from
tornado_fetcher import
Fetcher
# 创建一个爬虫
>>>
fetcher=Fetcher(user_agent= 'phantomjs'
, phantomjs_proxy= 'http://localhost:12306'
, poolsize= 10
)
# 开始连接Phantomjs的代码,可以渲染JS!
>>>
fetcher.fetch(url)
# 渲染成功后执行额外的JS脚本
>>>
fetcher.fetch(url, js_script= 'setTimeout("window.scrollTo(0,100000)", 1000)'
)
Python的requests包在抓取页面的时候页面源代码抓取不完全,页面数据不是动态加载的。
只能抓取到页面开头的部分,后面到结尾都抓不到,怎么回事?
您好,首先,sys.setdefaultencoding is evil。其次,不会用 Requests 就去看文档,不要乱来。
如果 Requests 检测不到正确的编码,那么你告诉它正确的是什么:
response.encoding = 'gbk'
print response.text
原始内容在 response.content 里,bytes,自己想怎么处理就怎么处理。
单个请求完全没必要用 Session。直接 requests.get(xxx) 就可以了。
最后,弄不明白怎么处理编码错误的字符串就仔细想想,或者用 Python 3.x,不要散弹枪编程。
以下是 Python 3。Python 2 在那个字符串前加个 u 告诉它是 unicode 也一样。 参考技术A 不用这么麻烦,直接鼠标点在网页上,右键查看网页源代码,里面如果没有你想要的数据,那就是动态加载了。现在很多页面都只是个架子,数据都是动态加载的,可以直接调试抓取数据接口。 参考技术B 不知道你的网页有多大,建议把上面的文本保存到文件来检查,控制台说不定有滚动和截断
以上是关于python怎么抓取渲染后的页面的主要内容,如果未能解决你的问题,请参考以下文章