微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

爬虫2 ajax请求抓取

  概述: 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] 举报,一经查实,本站将立刻删除。

相关推荐