前面说到获得了第一页的数据。而我们要获得后面的数据时,它们的url地址并不一样。详见下图:
> 第一页网址https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%A7%91%E5%B9%BB&sort=time&
> page_limit=20&page_start=0
>
> 第二页网址https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%A7%91%E5%B9%BB&sort=time&
> page_limit=20&page_start=20
>
> 第三页网址https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%A7%91%E5%B9%BB&sort=time&
> page_limit=20&page_start=40
>
> 当page为 1 2 3 4时
> page_start为 0 20 40 60
>
> 则可以找到规律 page_limit = 20 不变,而 page_start = (page-1) * 20
在这里找到规律之后我们就可以开始,下面附上源码:
import urllib.request
import urllib.parse
#定制请求对象
def get_request(page):
url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%A7%91%E5%B9%BB&sort=time&'
data ={
'page_limit':'20',
'page_start':(page-1)*20
}
data = urllib.parse.urlencode(data)
url = url + data
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36'}
request = urllib.request.Request(url = url ,headers = headers)
return request
#返回响应数据
def get_response(request):
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
return content
#将数据下载到本地
def download(page,content):
with open('豆瓣电影排行榜' + str(page) + '.json' ,'w' ,encoding=('utf-8')) as fp:
fp.write(content)
#通常表示程序的入口
if __ name__ == '__ main__':
star_page = int(input('请输入起始页:'))
end_page = int(input('请输入结束页:'))
for page in range(star_page,end_page+1):
#对每一页都进行请求对象的定制
request = get_request(page)
#返回响应数据
content = get_response(request)
#将数据下载到本地
download(page,content)
print("保存完毕")
有不懂或者不足的地方欢迎在评论区提出,感谢大家支持!!
标签:20,get,python,movie,request,content,start,ajax,page From: https://blog.51cto.com/u_15831459/5764123