ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

day16-requests的基本用法

2021-11-02 20:35:25  阅读:134  来源: 互联网

标签:标签 用法 soup day16 requests li data 选择器 select


requests的用法

运行环境:import requests

def get_web_data(url: str):
    # 1. 发送请求获取响应
    # requests.get(目标地址)
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
    }
    response = requests.get(url, headers=headers)

    # 如果网页中乱码:
    # 在网页内容打印结果找meta标签中的charset属性,将响应的encoding的值设置成charset属性的值
    # response.encoding = 'gbk'

    # 2.获取数据(请求结果,爬取的内容)
    # 1) 响应.text    -    用网页爬取结果
    print(response.text)


if __name__ == '__main__':
    get_web_data('https://movie.douban.com/top250')

网页开发

前端三大技术: html + css + js

1. html - 负责网页内容的显示

一个网页就是html标签(一个网页是一个html文件);
html是通过各种各样的标签来提供各种内容,包括:文字、图片、超链接、视频、音频、输入框、按钮等。
标签内容 - 可以是纯文字,也可以是一个或者多个其他标签

2. html核心语法 - 标签

标签分为两种:单标签、双标签

  1. 双标签: <标签名 属性1=“值1” 属性2=“值2” …>标签内容</标签名>
  2. 单标签: <标签名 属性1=“值1” 属性2=“值2” …> 或者 <标签名 属性1=“值1” 属性2=“值2” …/>

3. 网页结构: 一个网页是一个html标签,里面有两个子标签分别是head标签和body

<html>
  <head>
  </head>
  <body>
  </body>
</html>
<html>
  <head>
    <meta charset="utf-8">
    <title>余婷的网页</title>
    <link rel="icon" href="files/luffy.jpg">
  </head>

  <body>
    <!-- 1. 标题标签:h1~h2 -->
    <h1>你好!</h1>
    <h2>二级标题</h2>
    <h3>三级标题</h3>
    <h6>六级标题</h6>

    <!--  2.超链接:a  -->
    <a href="https://www.baidu.com">百度</a>

    <!--  3.图片标签:img  -->
    <img src="./files/luffy.jpg">
    <img src="http://pic.rmb.bdstatic.com/bjh/news/e73e83467ae1afa2d8624661d7e5f7c8.jpeg" alt="">

    <!-- 4.普通文字标签: p、span、div-->
    <p>豆瓣用户每天都在对“看过”的电影进行“很差”到“力荐”的评价,豆瓣根据每部影片看过的人数以及该影片所得的评价等综合数据,通过算法分析产生豆瓣电影 Top 250。</p>
    <p>导演: 弗兰克·德拉邦特 Frank Darabont   主演: 蒂姆·罗宾斯 Tim Robbins /...</p>
    <p>我是p标签1</p>
    <p>我是p标签2</p>
    <span>我是一段普通文字1</span>
    <span>我是一段普通文字2</span>
    <div>
      我又是一段文字
    </div>

    <input type="text">
    <input type="password">
    <input type="checkbox"><span>我没看过</span>
    <input type="button" value="确定">
    <button>确定</button>

    <select name="" id="">
      <option value="成都">成都</option>
      <option value="重庆">重庆</option>
      <option value="重庆">北京</option>
    </select>

    <p>如果有不懂的问题问<a href="https://www.baidu.com">百度</a></p>
  
    <ul>
      <li>
        <h2>Python</h2>
        <img src="https://image.baidu.com/search/detail?ct=503316480&z=undefined&tn=baiduimagedetail&ipn=d&word=python&step_word=&ie=utf-8&in=&cl=2&lm=-1&st=undefined&hd=undefined&latest=undefined&copyright=undefined&cs=3007672121,16493484&os=3426994009,3290649938&simid=3007672121,16493484&pn=3&rn=1&di=86570&ln=1824&fr=&fmq=1635834331044_R&fm=&ic=undefined&s=undefined&se=&sme=&tab=0&width=undefined&height=undefined&face=undefined&is=0,0&istype=0&ist=&jit=&bdtype=0&spn=0&pi=0&gsm=0&objurl=https%3A%2F%2Fgimg2.baidu.com%2Fimage_search%2Fsrc%3Dhttp%253A%252F%252Fs2.51cto.com%252Foss%252F201712%252F11%252Fd7bfd1805d9d1a315b0e6fe0cbc9a0dd.jpg%26refer%3Dhttp%253A%252F%252Fs2.51cto.com%26app%3D2002%26size%3Df9999%2C10000%26q%3Da80%26n%3D0%26g%3D0n%26fmt%3Djpeg%3Fsec%3D1638426330%26t%3D24d0deaa9fa2092ef857a307c01fcae1&rpstart=0&rpnum=0&adpicid=0&nojc=undefined&dyTabStr=MCwzLDEsMiw2LDQsNSw4LDcsOQ%3D%3D" alt="">
        <p>
          Python将被加入高考科目!
        </p>
      </li>

      <li>
        <h2>Java</h2>
        <img src="" alt="">
        <p>java介绍!</p>
      </li>

      <li>
        <h2>H5</h2>

      </li>
    </ul>

  </body>

</html>

css语法

css的作用:负责网页内容的样式和局部 - 对网页进行化妆

1. css语法:

选择器{属性1:属性值1;属性2:属性值2;…}

属性 - 不一样的属性决定不同的样式
选择器 - 选中标签

2.css选择器

1) 标签选择器,元素选择器
将标签名作为选择器,选中所有指定标签,例如:p{} - 选中所有p标签 img{} - 选中所有的img标签

2) id选择器
在标签的id属性前加#作为一个选择器,选中id值是指定值的标签。
例如: #abc{} - 选中id属性值为abc的标签
注意:id属性是唯一

3) class选择器,类选择器
在class属性前加 . 作为一个选择器,选中class属性值是指定值的标签
例如: . x{} - 选中class属性值为x的标签
注意:同一个class属性值可以有多个;同一个标签可以有多个class
.x.y{} - 选中class属性值同时包含x和y的标签

4) 群组选择器
将多个独立的选择器用逗号隔开作为一个选择器,选中每个独立选择器选中的内容
例如:
a,p{} - 选中所有的a标签和p标签
#p1,.c1 - 选中id值为p1和class值为c1的标签
a,.c1,.c2 - 选中所有的a标签和class值为c1和c2的标签

5) 后代选择器
将多个独立的选择器用空格隔开作为一个选择器
div p{} - 选中在div中的p标签(p只要是div的后代就行)

6) 子代选择器
将多个独立的选择器用 > 隔开作为一个选择器
div>p{} - 选中在div中的p标签(p必须是div的子代就行)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #abc,.c1{
            color:red;
        }
<!--   #jSearchHeroDiv>li>a>p   #jSearchHeroDiv p-->
    </style>
</head>
<body>
    <!--  c1和c2都是 '我是段落1' 这个p标签的class值 -->
    <p class="c1 c2 c3">我是段落1</p>
    <a href="" class="c2">我是超链接1</a>
    <p id="abc">我是段落2</p>
    <p>我是段落3</p>
    <a href="" class="c1">我是超链接2</a>

    <div id="box">
        <p>段落11</p>
        <div class="c2">
            <a href="">超链接33</a>
            <ul>
                <li>
                    <p>我是电影名称</p>
                    <a href="">超链接11</a>
                </li>
                <li>
                    <a href="">超链接22</a>
                </li>
            </ul>
            <p>段落22</p>
        </div>
        <div class="c1">
            <p>段落33</p>
        </div>
    </div>

</body>
</html>

bs4网页解析语法

运行环境:from bs4 import BeautifulSoup

0. 获取网页内容

content = open(‘网页.html’).read()
print(content)

1. 通过网页内容创建BeautifulSoup对象(这儿的网页内容就是需要解析网页数据)

BeautifulSoup(html代码, ‘lxml’)
soup就相当于html标签
soup = BeautifulSoup(content, ‘lxml’)
print(soup)

2. 获取标签

标签对象.select(css选择器) - 返回选择器选中的所有标签,返回一个列表,列表中的元素是标签对象
标签对象.select_one(css选择器) - 返回选择器选中的第一个标签,返回一个标签对象

result = soup.select('p')
print(result)       # [<p>什么都卖!</p>, <p>泡面</p>, <p>火腿肠</p>, <p>可乐</p>]

result = soup.select_one('p')
print(result)       # <p>什么都卖!</p>

练习:获取所有商品名称对应的标签

result = soup.select('li>p')
print(result)

# select_one、select前面的标签决定查找范围:在指定标签中通过选择器获取标签
li1 = soup.select_one('li')
result = li1.select('p')
print(result)       # [<p>泡面</p>]

3. 获取双标签标签内容

标签对象.text - 获取指定标签的内容

p1 = soup.select_one('p')
print(p1.text)      # 什么都卖!

# for tag in soup.select('p'):
#     print(tag.text)
result = [x.text for x in soup.select('p')]
print(result)

4.获取标签属性

标签对象.attrs[属性名]
注意:标签对象.attrs返回的是一个字典,标签的每个属性就是一个键值对

img = soup.select_one('img')
img_url = img.attrs['src']

for x in soup.select('img'):
    print(x.attrs['src'])

练习:获取网页中所有商品的信息

all_li = soup.select('li')
all_data = []
for li in all_li:
    data = {}
    data['name'] = li.select_one('p').text
    data['price'] = float(li.select_one('.price').text[1:])
    data['img'] = li.select_one('img').attrs['src']
    all_data.append(data)

print(all_data)

豆瓣电影爬取

运行环境:import requests
from bs4 import BeautifulSoup

1. 获取网页内容

def get_net_data(url: str):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
    }
    response = requests.get(url, headers=headers)
    return response.text


def analysis_data(html: str):
    soup = BeautifulSoup(html, 'lxml')
    all_li = soup.select('ol>li')
    all_data = []
    for li in all_li:
        data = {}
        # 电影名称
        name = li.select_one('.title').text
        data['name'] = name
        # 评分
        score = li.select_one('.rating_num').text
        data['score'] = float(score)
        # 总结
        message = li.select_one('.inq').text
        data['message'] = message
        # 图片地址
        pic_url = li.select_one('.pic img').attrs['src']
        data['url'] = pic_url

        all_data.append(data)

    return all_data


if __name__ == '__main__':
    result = get_net_data('https://movie.douban.com/top250')
    result = analysis_data(result)
    print(result)

标签:标签,用法,soup,day16,requests,li,data,选择器,select
来源: https://blog.csdn.net/m0_62840623/article/details/121107237

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有