zoukankan      html  css  js  c++  java
  • 控制流程,爬取豆瓣电影信息

    if 条件判断

    if 条件判断:   # if 条件成立,执行代码1,条件不成立,执行代码2
        代码1
    else:
        代码2
    

    单分支结构

    age = 19
    
    if age >= 18:
        print('你已经成年了!')
    

    双分支结构

    # 双分支结构
    age = 19
    if age >= 18:
        print('成年')
    else:
        print('未成年')
    

    多分支结构

    '''
    如果 成绩>=90,打印"优秀"
    如果 成绩>=80 并且 成绩<90,打印"良好"
    如果 成绩>=70 并且 成绩<80,打印"普通"
    其他情况:打印"差"
    '''
    
    score = int(input('请输入分数:'))
    
    if score >= 90:
        print('优秀')
    elif score >= 80:
        print('良好')
    elif score >= 70:
        print('普通')
    else:
        print('差')
    

    for循环

    循环就是重复做一件事

    range(10) 默认从0开始,10结束,默认步长为1,顾头不顾尾

    print(list(range(10)))
    # 打印结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    for i in range(10):   # 把列表内部的值循环打印出来  i = 0 , i = 2  。。。。。i = 9
        print(i)
    

    for 循环例子:

    for i in range(32):
        print(f'8月{i}日刷牙')
    

    注:f 格式化输出 》》字符串拼接 有了f {}就有了特殊含义

    for 循环嵌套:内部循环完全走完,才会走一次外层循环,每次走入外层循环,内层循环都会重置

    for j in range(1,13):  # j =1 # j = 2
        for i in range(1, 32):  # 控制的是日
            print(f'{j}月{i}日刷牙')
    
    • for + break
    for i in range(101):
        if i == 51:
            break   # 中断循环
        print(i)
        
     # 只打印0-50, 当i = 51时循环中断,跳出本层循环
    
    • for + continue
    for i in range(101):
        if i == 51:
            continue   # 跳出本次循环,不执行本次代码,进入下次循环
        print(i)
        
    # 不打印i = 51
    

    for循环习题

    for i in range(1, 13):      # 控制月
        for j in range(1,32):   # 控制日
            if j == 2 and i > 28:
                continue
            if j in [4, 6, 9, 11] and i > 30:
                continue
                
            print(f'{j}月{i}日刷牙')
    

    爬虫

    爬虫相关知识

    爬虫三部曲:

    1. 发送请求
    2. 解析数据
    3. 保存数据

    爬虫精髓:

    1. 分析网站的通信流程
    2. 分析查找数据从何而来
    3. 分析网站的反爬策略
    4. 根据网站的反爬策略编写攻击手段,获取数据

    爬虫程序

    1. 爬取豆瓣电影top250详情
    '''
    第一页:https://movie.douban.com/top250?start=0&filter=
    第二页:https://movie.douban.com/top250?start=25&filter=
    第三页:https://movie.douban.com/top250?start=50&filter=
    第四页:https://movie.douban.com/top250?start=75&filter=
    ……
    第十页:https://movie.douban.com/top250?start=225&filter=
    '''
    import requests
    import re
    
    # 1. 获取所有电影信息的url
    num = 0
    for line in range(10):
        url = f'https://movie.douban.com/top250?start={num}&filter='
        # print(url)
        num += 25
    
        # 2.发起请求
        response = requests.get(
            url=url
        )
        # print(response.text)
    
        '''
        1.电影名称
        2.电影详情页链接
        3.电影评分
        4.电影评价人数
        '''
        movie_list = re.findall(
            '<div class="item">.*?<a href="(.*?)">.*?<span class="title">(.*?)</span>.*?<span class="rating_num" property="v:average">(.*?)</span>.*?<span>(.*?)人评价</span>',
            response.text, re.S)
    
    
        count = 1
        with open('douban.txt', 'a', encoding='utf8') as f:
            for i in movie_list:
                movie_url = i[0]
                movie_name = i[1]
                movie_score = i[2]
                movie_count = i[3]
                f.write(f'{movie_url},电影名字:{movie_name},评分:{movie_score},评价人数:{movie_count} 
    ')
    
    
            print('数据保存成功,爬虫程序结束!')
    
    
    1. 爬取豆瓣电影接口

    分析目标网站的异步请求返回的数据(接口)

    json.loads() 把json数据类型转化为python数据类型

    json.dumps() 把python数据类型转化为json数据类型

    '''
    https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=0&limit=20
    https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=20&limit=20
    https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=40&limit=20
    https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=60&limit=20
    '''
    
    import requests
    import json
    
    # 1.拼接url
    num = 0
    for i in range(10):
        url = f'https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start={num}&limit=20'
        # print(url)
        num += 20
    
        # 2.发送请求
        response = requests.get(
            url=url
        )
        # print(response.text)
    
        # 把json数据类型转化为python数据类型
        # python_data = json.loads(response.text)
        # print(type(python_data))
        movie_list = json.loads(response.text)
    
        # 循环电影列表数据中的每一个字典
        for movie_dic in movie_list:
    
            # 2. 提取数据   电影名称,电影评分,电影的排名,图片地址,详情页地址
            movie_name = movie_dic['title']
            movie_score = movie_dic['rating'][0]
            movie_rank = movie_dic['rank']
            movie_img_url = movie_dic['cover_url']
            movie_url = movie_dic['url']
    
            # 3. 保存数据
            movie_data = f'''
            电影名称:{movie_name}
            电影评分:{movie_score}
            电影排名:{movie_rank}
            图片地址:{movie_img_url}
            详情地址:{movie_url}
            '''
            with open('豆瓣.txt', 'a', encoding='utf8') as f:
                f.write(movie_data)
    
            print('保存数据成功,爬虫程序结束')
    
    1. 爬取中国黄页手机号信息
    import requests
    import re
    
    url = 'http://gongcheng.huangye88.com/xinxi/143992399.html'
    
    # User-Agent: 反爬策略,判断是否为浏览器
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
    }
    response = requests.get(
        url=url,
        headers=headers
    )
    # print(response.text)
    
    phone_number = re.findall('<ul class="pro">.*?<li><label>手<span class="none">占</span>机</label><h3 class="big">(.*?)</h3></li>.*?</ul>',response.text,re.S)[0]
    print('手机号:', phone_number)
    
    
  • 相关阅读:
    L18 如何快速查找文档获得帮助
    L4 如何在XCode中下进行工作
    L17 怎么向应用程序商店提交应用
    Unity 烘焙材质到单一贴图的脚本
    关于用Max导出Unity3D使用的FBX文件流程注解
    计算两点之间的角度的代码
    Unity3d iOS基本优化和高级优化
    91SDK接入及游戏发布、更新指南
    UNITY3D与iOS交互解决方案
    Unity3d与iOS交互开发——接入平台SDK必备技能
  • 原文地址:https://www.cnblogs.com/setcreed/p/11426376.html
Copyright © 2011-2022 走看看