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怎么抓取渲染后的页面的主要内容,如果未能解决你的问题,请参考以下文章

用爬虫抓取网页得到的源代码和浏览器中看到的不一样运用了啥技术?

java爬虫怎么抓取登陆后的网页数据

python爬虫14--Selenium动态渲染页面抓取

怎么爬取网页的动态内容,很多都是js动态生

C#使用Selenium+PhantomJS抓取数据

Python的requests包在抓取页面的时候页面源代码抓取不完全,页面数据不是动态加载的。