爬虫day1学习总结

本文总结了爬虫day1的学习内容,包括requests库的使用,如发送请求和获取数据;HTML的基础知识,如网页结构和标签;CSS语法简介;使用bs4进行网页解析的步骤;以及实践案例——豆瓣电影数据的爬取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

爬虫day1学习总结

今日学习内容:

  • 01 requests的用法
  • 02 网页开发
  • 03 css语法
  • 04 bs4网页解析语法
  • 05 豆瓣电影爬取

01 requests的用法

学习之前先导入模块
import request

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')

02 网页开发

前端三大技术: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>

03 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的标签

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

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div>p{
            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>

04 bs4网页解析语法

from bs4 import BeautifulSoup

1.获取网页内容

content = open('网页.html').read()

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

# BeautifulSoup(html代码, 'lxml')
# soup就相当于html标签
soup = BeautifulSoup(content, 'lxml')

3.获取标签

# 标签对象.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>]

4.获取标签属性

# 标签对象.attrs[属性名]
# 注意:标签对象.attrs返回的是一个字典,标签的每个属性就是一个键值对
img = soup.select_one('img')
img_url = img.attrs['src']

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


# 练习:获取网页中所有商品的信息
# [{'name': '泡面', 'price': 3.5, 'img': 图片路径}, {}, {}]
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)

05 豆瓣电影爬取

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)

谢谢观看!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值