爬取豆瓣上的电影--获取ajax的加载内容

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/g_optimistic/article/details/89575255

目录

一.那么问题来了,有622条数据,有没有必要一次加载到页面中?

二.解决方案:使用ajax做局部刷新

1.爬取整个界面

2.通过ajax做局部刷新

(1)导入模块

(2)分析接口,总结规律

(3)代码

3.优化代码


豆瓣网址:https://www.douban.com/

我们想要爬取豆瓣网上分类是剧情的电影

进入官网---->电影----->排行榜----->分类排行榜------>剧情

点击进入

我们会发现满足条件的有622部电影,

一.那么问题来了,有622条数据,有没有必要一次加载到页面中?

答:没有必要

      界面不会把这些电影都给用户展现出来,当我们滑动滚动条的时候,会发现当滑动条快完的时候,滑动条又会变长,自己试一试,体会一下

(1)数据量大,在通信过程中要花费大量的时候,会让用户等待很久,用户体验较差

(2)由于数据量较大,一次加载到内存中会占用大量的内存空间

(3)由于用户只关心前几页的数据,后面的数据如果使用通信得来,或加载到内存江北视为浪费资源

二.解决方案:使用ajax做局部刷新

1.爬取整个界面

url 就是请求的地址

编写代码

import requests
url='https://movie.douban.com/typerank?type_name=%E5%89%A7%E6%83%85&type=11&interval_id=100:90&action='
response=requests.get(url)
with open('douban.html','w',encoding=response.encoding) as fp:
    fp.write(response.text)

运行程序:

在火狐浏览器上运行响应回来的界面:

没有有关电影的东西

2.通过ajax做局部刷新

(1)导入模块

import requests

(2)分析接口,总结规律

第一页:https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=0&limit=20

第二页:https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=20&limit=20

第三页:https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=40&limit=20

.............................

第n页:https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&limit=20&start=str(((n-1)*20))

(3)代码

第一种:直接   +拼接

import requests
for page in range(1,11,1):
    url='https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&limit=20&start='+str((page-1)*20)
    print('第%s页:'%page,url)
    response=requests.get(url)
    for movie in response.json():
        title=movie['title']
        address=movie['url']
        with open('douban_movie.txt','a',encoding=response.encoding) as fp:
            fp.write(title+':'+'\t'+address+'\n')

第二种:写成json格式

import requests

for page in range(1, 11, 1):
    url = 'https://movie.douban.com/j/chart/top_list'
    print('第%s页:'%page,url)
    data_dic = {
        'type': '11',
        'interval_id': '100:90',
        'limit': '20',
        'start': str((page - 1) * 20)
    }
    response=requests.get(url,data_dic)
    # print(response.json())
    for movie in response.json():
        title=movie['title']
        address=movie['url']
        with open('douban_movie.txt','a',encoding=response.encoding) as fp:
            fp.write(title+":\t"+address+"\n")

运行结果

看吧 爬虫还是挺有用的吧!!!

3.优化代码

爬取数据,能一次性爬完,绝不多次访问

指不定哪天就进不去了,所以能爬的时候都把它爬完

 

import requests

url = 'https://movie.douban.com/j/chart/top_list'
data_dic = {
    'type': '11',
    'interval_id': '100:90',
    'limit': '622',
    'start': '0'
}
response=requests.get(url,data_dic)
# print(response.json())
for movie in response.json():
    title=movie['title']
    address=movie['url']
    with open('douban_movie.txt','a',encoding=response.encoding) as fp:
        fp.write(title+':\t'+address+'\n')

运行完后,这622部电影的名字和地址都保存在douban_movie.txt里面了

猜你喜欢

转载自blog.csdn.net/g_optimistic/article/details/89575255
今日推荐