概述: ajax, 异步的,动态加载数据到网页。
用户浏览器请求-------后台响应页面框架------ajax请求后台数据加载到页面框架-------用户下拉等操作-------ajax异步请求后台数据,加载到现有框架,无需重新加载整个页面。
爬取需求:爬取使用ajax动态加载数据的页面时, 因数据不在页面框架中存放,所以无法直接获取。
1. 需要使用浏览器等工具,先找到ajax返回的响应:url + 数据
2. 根据url,查看参数变化规律,编写动态url
3. 使用urllib库的模块进行访问和获取数据
"""用ajax动态加载页面数据的网页,示例页面:豆瓣电影--排行榜--喜剧""" from urllib.request import Request, urlopen from urllib.parse import urlencode from fake_useragent import UserAgent import time """ 火狐浏览器 75.0(64位) 1. 在动态加载中,可以通过浏览器F12查看network网络数据交互,(火狐:选择‘XHR’,根据浏览器不同,点击不同选项进行查看) 2. 可以得到url:'https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start=0&limit=20' 3. 其中:type参数没有变化=24--推测:喜剧类型、interval_id没有变化--间隔、limit的值一直变化--加载影片个数 """ def get_html(url): headers = { 'User-Agent': UserAgent().chrome } # print(url) request = Request(url, headers=headers) response = urlopen(request) info = response.read() return info def save_html(data, filename): with open(filename, 'wb') as f: print('正在保存{}...'.format(filename)) f.write(data) def main(): while True: type = 24 limit = int(input("请输入要下载前几页的影视信息: ")) args = { "type": type, "limit": limit*20 } url = "https://movie.douban.com/j/chart/top_list?{}&interval_id=100%3A90&action=&start=0".format(urlencode(args)) try: data = get_html(url) except: continue print('没有这么多页信息') else: filename = '豆瓣电影-喜剧-' + str(limit*20) + '条.html' save_html(data, filename) if __name__ == '__main__': main()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。