• HTTP协议与使用Python获取数据并写入MySQL


      一、Http协议

      二、Https协议

      三、使用Python获取数据

      (1)urlib

      (2)GET请求

      (3)POST请求

      四、爬取豆瓣电影实战

      1.思路

      (1)在浏览器中输入https://movie.douban.com/j/search_tags?type=movie会得到显示的电影的分类标签,下面以“热门”为例

    {"tags":["热门","最新","经典","可播放","豆瓣高分","冷门佳片","华语","欧美","韩国","日本","动作","喜剧","爱情","科幻","悬疑","恐怖","成长"]}

      (2)在浏览器中输入https://movie.douban.com/进入豆瓣首页,然后下拉到“最近热门电影”,然后点击“更多”,浏览器中显示的url为https://movie.douban.com/explore#!type=movie&tag=热门&sort=recommend&page_limit=20&page_start=0,即表示热门电影的第一页中的20部影片。

      (3)下拉至底部,点击“显示更多”一下,则此时的url变为https://movie.douban.com/explore#!type=movie&tag=热门&sort=recommend&page_limit=20&page_start=20,也就表示第二页中的20部影片。

      (4)在浏览器中输入下面的url会得到20个json格式的字符串:https://movie.douban.com/j/search_subjects?type=movie&tag=热门&sort=recommend&page_limit=20&page_start=0。

      (5)针对每个url,如果返回的结果中存在数据,那么就将page_start增加20继续执行GET请求,直到不再返回数据为止。

      2.代码实现

    import urllib.request
    from urllib import parse
    import json
    
    # 获得全部电影标签
    url = 'https://movie.douban.com/j/search_tags?type=movie'
    # 需要将中文汉字转化成十六进制的形式,否则会报编码错误
    print(parse.quote('热门'))
    request = urllib.request.Request(url=url)
    response = urllib.request.urlopen(request, timeout=20)
    # 获得json形式的字符串
    result = response.read()
    print(result)
    # 将json形式的字符串解析成字典
    result = json.loads(result)
    print(result)
    # 将取字典的标签字段存储到列表中
    tags = result['tags']
    print(tags)
    # 定义一个列表存储电影的基本信息
    movies = []
    # 分别处理每个tag
    for tag in tags:
        print(tag)
        tag = parse.quote(tag)
        print(tag)
        start = 0
        # 不断请求,直到返回结果为空
        while True:
            # 拼接需要请求的url
            url = 'https://movie.douban.com/j/search_subjects?' 
                  'type=movie&tag=' + tag + '&sort=recommend&page_limit=20&page_start=' + str(start)
            print(url)
            request = urllib.request.Request(url=url)
            response = urllib.request.urlopen(request, timeout=20)
            # 获得json形式的字符串
            result = response.read()
            print(result)
            # 将json形式的字符串解析成字典
            result = json.loads(result)
            print(result)
            # 将取字典的标签字段存储到列表中
            result = result['subjects']
            print(result)
            # 循环跳出条件
            if len(result) ==0:
                break
            # 将每一条记录都添加到movies列表中
            for item in result:
                movies.append(item)
            # 修改起始位置,相当于点击"显示更多"
            start += 20
    
    print(len(movies))
  • 相关阅读:
    easyui datagrid 显示 footer
    ie浏览器 vuejs axios Promise 未定义
    react引入富文本编辑器TinyMCE
    react中ant-design组件实现textarea获取光标位置并插入表情图片
    前端日志埋点优化
    iframe父子页面通讯
    HTML5中的audio在react中的使用----语音播放进度条、倍速播放、下载等
    echarts简单入门
    在textarea里实现获取光标位置和选中内容
    lodash数组发现之旅--------The second day
  • 原文地址:https://www.cnblogs.com/BigJunOba/p/9454316.html
Copyright © 2020-2023  润新知