虽然这是一个很久以前的问题。但是看到好多答案的办法有点太重了,这里分享一个效率更优、资源占用更低的方法。
首先请一定记住,浏览器环境对内存和CPU的消耗都非常严重,模拟浏览器环境的爬虫代码要尽可能避免。请记住,对于一些前端渲染的网页,虽然在html源码中看不到我们需要的数据,但是更大的可能是它会通过另一个请求拿到纯数据(很大可能以JSON格式存在),我们不但不需要模拟浏览器,反而可以省去解析HTML的消耗。
然后,我们以北邮人论坛为目标!打开北邮人论坛的首页,发现它的首页HTML源码中确实没有页面所显示文章的内容,那么,很可能这是通过JS异步加载到页面的。通过浏览器开发工具(Chrome浏览器在OS X下通过command+option+i或Win/linux下通过F12)分析在加载首页的时候请求,容易发现,如下截图中的请求:
截图中选中的请求得到的response即是首页的文章链接,在preview选项中可以看到渲染后的预览图:
至此,我们确定这个链接可以拿到首页的文章及链接。在headers选项中,有这次请求的请求头及请求参数,我们通过Python模拟这次请求,即可拿到相同的响应。再配合BeautifulSoup等库解析HTML,即可得到相应的内容了。
对于如何模拟请求和如何解析HTML,小编有时间在再写,大家记得关注一下,以后常分享给大家好的文章!