day21-网页数据爬取1

day21

总结

1. css选择器基础
  • <!-- 
    css负责网页内容的样式和布局
    css - 层叠样式表(简称:样式表)
     
     1. css语法
     语法:
     选择器{属性名1:属性值1; 属性名2:属性值2; ...}
     
     说明:
     选择器    -   选中需要设置样式的标签
     {}       -   固定写法
     属性名    -   决定需要设置那个样式
     属性值    -   如果是表示数值大小,数字值需要单位,一般是px
     
     常用属性: color: 文字样色(颜色值:颜色英文单词、rgb(红,绿,蓝)、#颜色值的16进制值)
              font-size: 字体大小
              background-color: 背景颜色
              width: 设置宽度
              height: 设置高度
     
     2.css代码写在哪儿
     1)内联样式表 - 将css代码写在标签的style属性中(这个时候不需要写 选择器{})
     2)内部样式表 - 将css代码写在style标签中(style标签既可以放在head中,也可以放在body中)
     3)外部样式表 - 将css代码写在css文件中,然后在html里面通过link标签导入
     -->
    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8">
    		<title></title>
            
            <!-- 内部样式 -->
            <!-- <style type="text/css">
                p{
                    color: rgb(230, 78, 90);
                }
                a{
                    color: rgb(23, 200, 178);
                }
            </style> -->
            
            <!-- 外部样式 -->
            <link rel="stylesheet" type="text/css" href="./css/styl1.css"/>
            
    	</head>
    	<body>
            <!-- <h1>1. 内联样式案例:</h1>
            <p style="color: rgb(0,191,255); font-size: 30px; background-color: 	#ADFF2F;">我是段落1</p>
            <a href="">我是超链接1</a> -->
            
            <!-- <h1>2.内部样式案例</h1>
            <p>我是段落1</p>
            <a href="">我是超链接1</a>
            <p>我是段落2</p> -->
            
            <p>我是段落1</p>
            
    	</body>
    </html>
    
  • <!--
     css选择器
     1. 标签选择器(元素选择器)  - 1
     直接将标签名作为一个选择器,选中整个页面所有的指定标签。
     例如: p{} - 选中所有的p标签,a{} - 选中所有的a标签
     
     2. id选择器  - 4
     在标签的id属性值前加#作为一个选择器,选中id属性值是指定值的标签。(id是唯一的)
     例如: #p2{}  - 选中id值为p2的标签, #a - 选中id属性值为a的标签
     
     3. 类选择器(class选择器)  - 2
     在标签的class属性值前加.作为一个选择器,选中class属性值是指定值的所有标签。
     例如: .c1{}  - 选中class属性值为c1的所有标签, .a{}  - 选中class属性值为a的所有标签
          .c1.c2 - 选中class属性值中同时有c1和c2和标签
          
     4. 群组选择器
     将多个独立的选择器用逗号隔开作为一个选择器,选中每个独立选择器选中的所有标签。
     例如:p,a{}  - 选中所有的p标签和所有的a标签
          .c1,p{} - 选中所有class是c1的标签和所有的p标签
          .c1,#p1,#p2{}  -  选中所有class是c1, id是p1和id是p2的标签
          
     5.后代选择器
     将多个独立的选择器用空格隔开作为一个选择器
     例如: p a - 选中所有作为p标签的后代的a标签。(选中p标签下面的a标签, a是p的后代)
          div #p1 .c1  - 选中div下面的id为p1下面class为c1的标签
          
     6.子代选择器
     将多个独立的选择器用>隔开作为一个选择器
     例如: p>a - 选中所有作为p标签的子代的a标签
     
     
     div.info{}   -  选中class为info的div标签
     #p1.c1{}  -  选中id是p1并且class是c1的标签
     
     p:nth-child(N)  -  选中第N个p标签
     div p:nth-child(N)  -  选中div里面的第N个p标签
     -->
    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8">
    		<title></title>
            <style type="text/css">
                /* =============1.标签选择器============= */
                /* p{
                    color: red;
                }
                a{
                    color: coral;
                    text-decoration: none;  
                } */
                
                /* =============2.id选择器============= */
                /* #p2{
                    color: darkcyan;
                    font-size: 35px;
                } */
                
                /* =============3.类选择器============= */
                /* .c1{
                    color: green;
                }
                .c2{
                    background-color: yellow;
                }
                
                .c1.c2{
                    font-size: 35px;
                } */
                
                /* =============4.群组选择器============= */
                /* p,a{
                    color: darkmagenta;
                } */
                
                
                /* =============5.后代选择器============= */
                /* div div a{
                    color: red;
                } */
                
               /* div>a{
                    color: red;
                } */
                
               /* div>div a{
                  color: red;  
                } */
                
                
                /* p.c1{
                    color: red;
                } */
                
                div p:nth-child(2){
                    color: red;
                }
            </style>
            
            
    	</head>
    	<body>
            <p class="c1">我是段落1</p>
            <a href="">我是超链接1</a>
            <div id="">
                <p id="p2">我是段落2</p>
                <font class="c1">我是font1</font>
                <input type="" name="" id="" value="" />
                
                <!-- a标签同时拥有三个class值,分别是c1和c2、c3 -->
                <a class="c1 c2 c3" href="">我是超链接2</a>
                
                <div id="">
                   <h2 class="c2">我是标题1</h2> 
                   <p>我是段落3</p>
                   <a href="">我是超链接3</a>
                   <p class="c1">
                       我是段落4
                       <a href="">我是超链接5</a>
                   </p>
                </div>
                
            </div>
            
    	</body>
    </html>
    
    
2. 网页爬取
  • import requests
    
    
    def main():
        # 1. 发送请求,获取响应
        url = 'https://movie.douban.com/top250'
        # 设置请求头
        headers = {
            'User-Agent': 'Mozilla/5.0'
        }
        # response = requests.request('GET', 'https://movie.douban.com/top250')
        response = requests.get(url, headers=headers)
    
        # 一般418是身份不对
        # 2. 设置request的请求头,伪装成浏览器
        headers = {
            'User-Agent': 'Mozilla/5.0'
        }
        response = requests.get(url, headers=headers)
    
        # 3. 设置编码方式
        if response.status_code == 200:
            print(response)
    
        # 4. 获取json数据,自动转换为python中的数据。相当于json.dumps(response.text)
            py_obj = response.json()
    
        # 5. 获取二进制数据(针对url是二进制文件,比如图片、音频、视频)
            bys = response.content
            with open(r'./a.jpg', 'wb') as f:
                f.write(bys)
    
        # 6. 获取响应头
            res_headers = response.headers
    
    
    if __name__ == '__main__':
        headers = {
            'User-Agent': 'Mozilla/5.0'
        }
        url = 'https://movie.douban.com/top250'
        response = requests.get(url, headers=headers)
    
        if response.status_code == 200:
            print(response.text)
    
  • # myThread.py
    
    import threading
    
    
    class MyThread(threading.Thread):
        def __init__(self, func, *args, **kwargs):
            super().__init__()
            self.func = func
            self.args = args
            self.kwargs = kwargs
    
        def run(self) -> None:
            self.func(*self.args, **self.kwargs)
    
  • # 如果目标王者以多页的方式来提供数据,爬虫的时候先找不同页面的url之间的规律
    
    import requests
    from myThread import MyThread
    
    
    def get_top250(url, headers={}):
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            print(response.text)
            print('==================================')
        print('请求失败:', response)
        return
    
    
    if __name__ == '__main__':
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'
        }
    
        for x in range(0, 50, 25):
            url = f'https://movie.douban.com/top250?start={x}&filter='
            new_thread = MyThread(get_top250, url, headers=headers)
            new_thread.start()
    

作业

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值