Day-22 代理和css选择器解析库

本文介绍了在Python爬虫中如何获取和使用代理IP,以及利用BeautifulSoup解析HTML并使用CSS选择器选取标签。详细讲解了如何获取标签内容、属性,以及通过select和select_one方法操作子标签。此外,还涵盖了CSV文件的读写操作,包括使用writer和DictWriter进行数据写入,以及以列表或字典方式读取CSV文件内容。
摘要由CSDN通过智能技术生成

Day-22 代理和css选择器解析库

  1. 获取代理ip

    import requests
    
    def get_proxy_ips():
        api = 'http://piping.mogumiao.com/proxy/api/get_ip_bs?appKey=3ee6f035175f4b508d8a825da0fb3833&count=4&expiryDate=0&format=2&newLine=3'
        response = requests.get(api)
        if response.status_code == 200:
            if response.text[0] == '{':
                print('获取代理失败, 提取太频繁')
            else:
                return response.text.split('\n')[:-1]
        else:
            print('请求失败')
    
    def get_net_data():
        url = 'https://movie.douban.com/top250'
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
        }
        # 代理
        ips = get_proxy_ips()
        if ips:
            proxies = {
                'http': ips[0],
                'https' : ips[1]
            }
    
            response = requests.get(url, headers = headers, proxies=proxies, timeout = 2)
            if response.status_code == 200:
                print(response.text)
            else:
                print('数据请求失败!')
        else:
            print('没有成功获取到代理')
    
    
    if __name__ == '__main__':
        get_net_data()
    
  2. bs4的使用

    1. 创建解析器对象

      # 1. 创建解析器对象
      # # BeautifulSoup(需要解析的html字符串, 解析器名称)
      # bs = BeautifulSoup(data, 'lxml')
      
    2. 根据css选择器获取标签

      # 2. 根据css选择器获取标签
      # select(css选择器)  -    获取选择器选中的所有标签
      # sekect_one(css选择器)    -   获取选择器选中的第一个标签
      result = bs.select('#p1')
      print(result)
      
    3. 获取标签内容

      • 标签对线.string - 获取标签的文字内容(如果标签内容中有多个子标签,
        或者同时存在文字和子标签时,结果是None)

      • 标签对象.get_text() - 获取标签的文字内容(如果有子标签, 会将子标签中的文字内容一起获取)

      • 标签对象.contents - 获取标签中的文字和子标签, 返回值是列表

        p1 = bs.select_one('div>p')
        print('string:', p1.string)
        print('text', p1.get_text())
        print('contents', p1.contents)
        p
        
        p2 = bs.select_one('#p1')
        print('p2:', p2)
        print('p2-string:',p2.string)
        print('text:', p2.get_text())
        print('contents', p2.contents)
        
        p3 = bs.select_one('.story')
        print('string', p3.string)    # None
        print('text', p3.get_text())
        
    4. 获取标签属性

      • 标签对象.attrs[属性名]

      • img = bs.select_one('img')
        print(img.attrs)
        print(img.attrs['src'])
        
    5. 在指定标签中获取子标签

      • 标签对象.select(css选择器) - 获取指定标签中选择器选中的所有标签
      • 标签对象.select_one(css选择器)- 获取指定标签中选择器选中的第一个标签
  3. csv文件操作

    1. 创建一个writer

      • csv.writer(文件对象) - 以列表为单位写入一行数据

      • csv.DictWriter() - 以字典为单位写入一行数据

        1. 以列表提供数据

          with open('files/test.csv', 'w', newline='', encoding='utf-8') as f:
              writer = csv.writer(f)
          
        2. 写入数据

          writer.writerow(['姓名', '性别', '年龄', '分数'])
          writer.writerows([
              ['张三', '男', '15', '54'],
              ['李四', '女', '23', '65'],
              ['王五', '男', '17', '90']
          ])
          
        3. 以字典提供数据

          with open('files/test2.csv', 'w', newline='', encoding='utf-8') as f:
              writer = csv.DictWriter(f, ['name', 'age', 'gender', 'score'])
          
              # 第一行内容
              writer.writerow({'name':'姓名', 'age':'年龄', 'gender':'性别', 'score':'分数'})
              # writer.writeheader()
          
              # 写一行
              writer.writerow({'name':'张三', 'age':'56', 'gender':'男', 'score':'98'})
              # 写多行
              writer.writerows([
              {'name':'张三1', 'age':'56', 'gender':'男', 'score':'98'},
              {'name':'张三2', 'age':'56', 'gender':'男', 'score':'98'},
              {'name':'张三3', 'age':'56', 'gender':'男', 'score':'98'}
              ])
          
        4. 读取csv文件内容

          • 注意: 任意一个csv文件都可以选择使用列表或者字典的方式去读

          • 一行数据对应一个列表

            with open('files/test.csv', 'r', newline='', encoding='utf-8') as f:
                # reader就是每一行内容对应的迭代器. (reader是一个迭代器, 迭代器中的元素是每一行内容对应的列表)
                reader = csv.reader(f)
                # print(next(reader))
                # print(next(reader))
                # next(reader)
                # print(next(reader))
                # print(list(reader))
            
          • 一行数据对应一个字典

            with open('files/test.csv', 'r', newline='', encoding='utf-8')as f:
                reader = csv.DictReader(f)
                print(reader.fieldnames)    # ['姓名', '性别', '年龄', '分数']
                print(next(reader))     # OrderedDict([('姓名', '张三'), ('性别', '男'), ('年龄', '15'), ('分数', '54')])
                print(next(reader))
            
数据治理是确保数据准确性、可靠性、安全性、可用性和完整性的体系和框架。它定义了组织内部如何使用、存储、保护和共享数据的规则和流程。数据治理的重要性随着数字化转型的加速而日益凸显,它能够提高决策效率、增强业务竞争力、降低风险,并促进业务创新。有效的数据治理体系可以确保数据在采集、存储、处理、共享和保护等环节的合规性和有效性。 数据质量管理是数据治理中的关键环节,它涉及数据质量评估、数据清洗、标准化和监控。高质量的数据能够提升业务决策的准确性,优化业务流程,并挖掘潜在的商业价值。随着大数据和人工智能技术的发展,数据质量管理在确保数据准确性和可靠性方面的作用愈发重要。企业需要建立完善的数据质量管理和校验机制,并通过数据清洗和标准化提高数据质量。 数据安全与隐私保护是数据治理中的另一个重要领域。随着数据量的快速增长和互联网技术的迅速发展,数据安全与隐私保护面临前所未有的挑战。企业需要加强数据安全与隐私保护的法律法规和技术手段,采用数据加密、脱敏和备份恢复等技术手段,以及加强培训和教育,提高安全意识和技能水平。 数据流程管理与监控是确保数据质量、提高数据利用率、保护数据安全的重要环节。有效的数据流程管理可以确保数据流程的合规性和高效性,而实时监控则有助于及时发现并解决潜在问题。企业需要设计合理的数据流程架构,制定详细的数据管理流程规范,并运用数据审计和可视化技术手段进行监控。 数据资产管理是将数据视为组织的重要资产,通过有效的管理和利用,为组织带来经济价值。数据资产管理涵盖数据的整个生命周期,包括数据的创建、存储、处理、共享、使用和保护。它面临的挑战包括数据量的快速增长、数据类型的多样化和数据更新的迅速性。组织需要建立完善的数据管理体系,提高数据处理和分析能力,以应对这些挑战。同时,数据资产的分类与评估、共享与使用规范也是数据资产管理的重要组成部分,需要制定合理的标准和规范,确保数据共享的安全性和隐私保护,以及建立合理的利益分配和权益保障机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值