js 爬虫抓取网页数据(动态网页静态网页的常用方法及常用技巧 )
优采云 发布时间: 2021-10-11 05:22js 爬虫抓取网页数据(动态网页静态网页的常用方法及常用技巧
)
静态页面
静态网页是指网页中没有程序代码,只有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]['标题'])
结果如下(只显示了一部分):