js 爬虫抓取网页数据( 如何模拟请求和如何解析HTML源码中的文章及链接)

优采云 发布时间: 2022-03-10 15:23

  js 爬虫抓取网页数据(

如何模拟请求和如何解析HTML源码中的文章及链接)

  X-Requested-With:XMLHttpRequest

  这是一个栗子:

  的职位列表

  

  

  点击Android后,我们从浏览器上传了几个参数到拉钩的服务器

  一个是first=true,一个是kd=android,(关键字)一个是pn=1(页码)

  所以我们可以模仿这一步来构造一个数据包来模拟用户的点击动作。

  post_data = {'first':'true','kd':'Android','pn':'1'}

  虽然这是很久以前的问题,但线程所有者似乎也解决了这个问题。但是看到很多答案有点太重了,这里有一个更高效,资源消耗更少的方法。由于标题没有具体说明需要什么,所以这里的例子取了首页所有帖子的链接和标题。

  首先请记住,浏览器环境的内存和CPU消耗是非常严重的,要尽量避免模拟浏览器环境的爬虫代码。请记住,对于一些前端渲染的网页,虽然我们需要的数据在 HTML 源代码中看不到,但更有可能通过另一个请求得到纯数据(很可能是 JSON 格式),不仅不需要模拟浏览器,但可以省去解析HTML的消耗。

  然后,打开北友人论坛首页,发现其首页的HTML源码中确实没有文章页面显示内容。那么,很有可能这是通过JS异步加载到页面中的。通过浏览器开发工具(OS X下的Chrome浏览器通过command+option+i或者Win/Linux下通过F12)分析加载首页时的请求,很容易发现,请求如下截图:

  

  从截图中选择的请求得到的响应是首页的文章链接。您可以在预览选项中看到渲染的预览:

  

  至此,我们已经确定这个链接可以获取到首页的文章和链接。

  在 headers 选项中,有这个请求的请求头和请求参数。我们可以通过 Python 模拟这个请求,得到同样的响应。然后配合BeautifulSoup等库解析HTML,就可以得到对应的内容。

  关于如何模拟请求以及如何解析HTML,请移步我的专栏进行详细介绍,这里不再赘述。

  这样就可以在不模拟浏览器环境的情况下抓取数据,大大提高了内存和CPU的消耗以及抓取速度。在编写爬虫时,请务必记住,除非必要,否则不要模拟浏览器环境。如果是windows下,可以尝试调用windows系统中的webbrowser控件。另外,ie本身也提供了接口。但是这两种方法都需要渲染页面,在性能上有些浪费。为了加快速度,可以关闭ie的图片下载显示,然后通过点击等方法模拟真实行为。谷歌幻影JS

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线