多页爬取
上次说到电视剧的列表信息是通过Ajax网络请求获取到数据的,当我们打开页面的时候,页面再向另一地址发出请求,得到数据后再渲染到网页上,我们是在network中找到的目标url。所以说,当我们想要爬取第二页,第三页以后的内容所要请求的url都可以在network中找到。
我们请求的目标url是https://movie.douban.com/j/search_subjects?type=tv&tag=热门&sort=recommend&page_limit=20&page_start=0
,很明显请求是带了几个参数的,在network中找到它。
我们在请求头的参数里找到了,总共有五个参数,看字面意思很好理解:
- type:tv,我们爬取的是电视剧,所以是tv;
- tag:热门,我们选择的是
热门
标签; - sort:排序,我们选择的是
recommend
,按热度排序; - page_limit:页限制,每页的电视剧列表中含有20部电视剧;
- page_start:每页是从第几部电视剧开始的,这里是0,也就是从头开始。
根据对参数的分析,我们只需要改动最后一个参数就可以了,所以我们就有了思路,在一个整数列表里循环,得到0、20、40…然后再转换为字符串拼接的前边的字符串中:
str(x) for x in range(0, 60, 20)
这里先爬取三页的做个示例,加入到__init__()
中:
def __init__(self, *args, **kwargs):
super(tvSpider, self).__init__(*args, **kwargs)
self.start_urls = ["https://movie.douban.com/j/search_subjects?type=tv&tag=热门&sort=recommend&page_limit=20&page_start=" +<