js 爬虫抓取网页数据(动态网页静态网页的常用方法及常用技巧 )

优采云 发布时间: 2021-10-11 05:22

  js 爬虫抓取网页数据(动态网页静态网页的常用方法及常用技巧

)

  静态页面

  静态网页是指网页中没有程序代码,只有HTML,一般后缀为.html、.htm或.xml等,静态网页一旦创建,内容不会改变。因为这些网页的内容存储在网站服务器上,如果要修改内容,必须修改网页源代码,重新上传到网站服务器。

  动态网页

  动态网页的网页文件除了HTML之外,还有一些特定功能的程序代码。通过这些代码,浏览器可以与服务器进行交互,即服务器可以根据浏览器的请求生成网页内容。通俗地说,当我们打开一个动态网页时,服务器不会一次返回所有页面内容。我们需要什么内容,通过浏览器与服务器交互,服务器会返回相应的内容。这种加载数据的方式称为API加载数据。API(Application Programming Interface)是应用程序编程接口,是网页与服务器交互的方式。

  正是因为服务器不会一次性返回所有页面内容,所以很多数据不在网页源代码中,所以无法用BeautifulSoup解析提取(提取结果为空)。这时候就需要用到动态网络爬虫了。

  爬取动态页面一般有两种常用的方法:(1),JavaScript的逆向工程获取动态数据接口(真实访问路径)——通过API爬取数据。(2),使用selenium库模拟一个真正的浏览器并获取 JavaScript 呈现的内容。

  今天我们主要介绍第一个通过API爬取数据。以爬取今日头条热榜为例。

  第一步:找到数据的藏身之处

  打开今日头条,头条热榜内容如下(只显示一页,共5页,共50条内容):

  

  打开web开发者工具,找到里面的Network面板,找到里面的XHR。我们需要的内容就在这里。Network面板中有很多请求信息,如下图:

  

  双击请求信息弹出一个小界面,里面有Headers、Preview、Response等信息。可以在Preview中逐层查看数据,如下图:

  

  Headers中的General可以看到发起请求的链接(Request URL)、请求方法(Request Method)和状态码(StatusCode),如下图所示:

  

  第二步:代码实现

  完整代码如下:

  

  #导入需要的模块

  *敏*感*词*请求

  从 bs4 导入 BeautifulSoup

  #传入请求头中的信息,将爬虫伪装成浏览器

  标题 = {

  '用户代理':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/ 94.0.4606.71 Safari/537.36',

  '推荐人':'/?wid=28'

  }

  #将API链接的查询字符串传递给Params参数(为了让URL看起来更整洁)

  参数 = {

  '起源':'toutiao_pc',

  '_signature':'_02B4Z6wo00f01xyjH3gAAIDDkCFR9fyaAVschxvAAKaBtffSC12aIOJf.5gyG9jkJUZWI3K1I0v0KkQNZLFN.uKdBoA0tUmuVnM6Me9HFJlX0HZH7MdKvJlX60dMekoHFJlX60dMekoHFJlX60dMekoHFJlX60Med

  }

  res = requests.get('/hot-event/hot-board/',headers=headers,params=params)

  #返回结果为JSON格式,调用json()方法解析

  项目 = res.json()

  num = [i for i in range(len(items['data']))]

  对于 num 中的 x:

  打印(项目['数据'][x]['标题'])

  结果如下(只显示了一部分):

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线