首页 > 编程语言 >python爬虫从0到1 -ajax的get请求进阶

python爬虫从0到1 -ajax的get请求进阶

时间:2022-10-17 20:07:28浏览次数:47  
标签:20 get python movie request content start ajax page


前面说到获得了第一页的数据。而我们要获得后面的数据时,它们的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

相关文章