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)
    
    
  • 相关阅读:
    io学习
    asp.net文件上传进度条研究
    asp.net页面中的Console.WriteLine结果如何查看
    谨慎跟随初始目的不被关联问题带偏
    android 按钮特效 波纹 Android button effects ripple
    安卓工作室 日志设置
    安卓工作室 文件浏览器 android studio File browser
    一个新的Android Studio 2.3.3可以在稳定的频道中使用。A new Android Studio 2.3.3 is available in the stable channel.
    新巴巴运动网上商城 项目 快速搭建 教程 The new babar sports online mall project quickly builds a tutorial
    码云,git使用 教程-便签
  • 原文地址:https://www.cnblogs.com/setcreed/p/11426376.html
Copyright © 2011-2022 走看看