Python爬虫基础之requests+xpath解决动态加载问题(四)

今天爬取的是豆瓣励志分类电影,解决动态加载问题。链接在这里:

https://movie.douban.com/tag/#/?sort=T&range=0,10&tags=%E5%8A%B1%E5%BF%97

如图1所示它的主页面:
  

在这里插入图片描述
图1

这次,需要在开发者模式,审查Network的JS或者是XHR,一般数据会在Network的 JS或者 XHR 类目里。首先我们在开发者模式中点击“加载更多”选项,此时返回了一个新的文件,出于好奇,我们有必要看看究竟右键点击 >> Open in new tab,出现如图2所示的数据。有的网站返回的 JS、XHR 信息比较多,需要你去尝试和筛选。经过观察我们发现,这些数据正好是我们加载出来的电影信息。
当然,如果你的页面打开后发现数据比较乱,可以在你的chrome中运行这个插件,

在这里插入图片描述
图2

我们可以在多点几次“加载更多”,然后在开发者模式中选中XHR找到Headers在General中找到Request URL

https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10&tags=%E5%8A%B1%E5%BF%97&start=20
https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10&tags=%E5%8A%B1%E5%BF%97&start=40
https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10&tags=%E5%8A%B1%E5%BF%97&start=60

比较后就可以轻松发现,这些页面的 url 是有规律的:只有最后 start= 后面的数字在变化,而且是以20为步长递增的,20正好对应每次加载出来的电影数量。
于是我们可以轻松地写出页面循环来爬取:

for a in range(3):    
url='https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10&tags=&start={}'.format(a*20)
#用 a*20 表示每个页面按 20 的步长递增,只示例3个页面,你可以按需求增加。

整体代码如下:

import requests
import time
with open('C:/Users/Administrator/Desktop/2.csv','w',encoding='utf-8') as f:
    for a in range(3):
        #取三组20*3=60个数据
        url_visit = 'https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10&tags=&start={}'.format(a*20)
        file = requests.get(url_visit).json()
        #之前我们用的 .text是需要网页返回文本的信息,而这里返回的是json文件所以用.json()
        time.sleep(2)
        for i in range(20):
            dict=file['data'][i]   #取出字典中 'data' 下第 [i] 部电影的信息
            urlname=dict['url'] #取出URL
            title=dict['title'] #取出电影名称
            rate=dict['rate'] #取出评分
            cast=dict['casts'] #取出演职人员
            f.write('{},{},{},{}\n'.format(title,rate,'  '.join(cast),urlname))
            #’ '.join(cast)将每个演员都用空格分开

我将数据存成.csv格式,用excel打开后如图3所示:
  


在这里插入图片描述
图3

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值