Python大数据之Python爬虫学习总结——day14_爬取图片和数据

爬取图片和数据

    • 1.爬虫入门
      • 知识点:
      • 示例:
    • 2.爬取图片
      • 爬取图片方式1:
      • 爬取图片方式2:
    • 3.爬取视频实战:
    • 4.爬取文本
      • 爬取文本方式1:
      • 爬取文本方式2:

1.爬虫入门

知识点:

网络爬虫:(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

爬虫步骤 :
1.准备有效的URL
2.发送请求,获取响应对象
3.从响应对象中提取数据
4.检索自己想要的数据
5.数据保存或者数据可视化
  
requests模块:
1.导包
2.变量接收响应对象 = requests.get(url)

示例:

"""
安装requests模块
pip install requests
"""
# 1.导包
import requests

# 2.准备有效URL
url = 'http://www.baidu.com/'
# 3.使用requests发送请求,或者Response对象
res = requests.get(url)
print(res)
# 4.从Response对象中提取数据
# 获取url
print(res.url)
# 获取状态码
print(res.status_code)
# 获取头
print(res.headers)
# 获取cookies
print(res.cookies)
# 获取编码
print(res.encoding)
# 修改编码
# res.encoding = 'utf8'
# print(res.encoding)
# 获取文本
# print(res.text)
# 获取内容,默认二进制需要使用decode()解码
print(res.content.decode())

2.爬取图片

web服务器:
前提·:复制source资源到项目中,source资源有html(网页文件)、image(图像文件)、video(视频文件)

# 1.导包
from fastapi import FastAPI
from fastapi import Response
import uvicorn

# 2.创建对象
app = FastAPI()


# 3.使用对象接收浏览器请求,并且使用对象给浏览器响应资源
# 注意: get中传入请求的资源路径
@app.get('/')
def func():
    with open('source/html/index.html', 'rb') as f:
        data = f.read()
    res = Response(data)
    return res


@app.get('/{html_name}')
def func(html_name: str):
    with open(f'source/html/{html_name}', 'rb') as f:
        data = f.read()
    res = Response(data)
    return res


@app.get('/images/{img_name}')
def func(img_name: str):
    with open(f'source/images/{img_name}', 'rb') as f:
        data = f.read()
    res = Response(data)
    return res


@app.get('/video/{vi_name}')
def func(vi_name: str):
    with open(f'source/video/{vi_name}', 'rb') as f:
        data = f.read()
    res = Response(data)
    return res


# 4.启动服务器(指定fastapi对象,主机地址,端口号)
uvicorn.run(app,host='192.168.86.44',port=9091)

爬取图片方式1:

核心知识点:

  • 爬虫相关知识点

  • 字符串切割方法: split()

  • 正则表达式match匹配

  • 列表的定义和遍历

  • ​ if判断

  • ​ 枚举函数自动生成从0开始的编号: enumerate()

  • ​ 文件操作相关知识点

# 1.导包
import requests
import re

# 2.准备要爬取数据的页面有效url
url = 'http://192.168.86.44:9091/index.html'

# 3.requests发送请求,获取响应对象
response = requests.get(url)

# 4.content从响应对象中提取数据
html_str = response.content.decode()

# print(html_str)
# 5.正则表达式从页面数据中匹配所有图片路径
# 把每一行放到列表中
html_list = html_str.split('\n')
# print(html_list) # ['    ']
# 提前定义空列表用于存储图片路径
img_list = []
# 遍历列表依次匹配每一行数据
for line in html_list:
    data = re.match('.*, line)
    # 如果匹配成功,把路径存储起来
    if data:
        img_list.append(data.group(1))
# 循环外测试图片路径是否爬取到
print(img_list)

# 6.拼接图片url,并且批量发送请求
base_url = 'http://192.168.86.44:9091'
# 遍历图片路径列表
for i, img_path in enumerate(img_list):
    # 拼接图片url
    img_url = base_url + img_path[2:]
    # 发送请求获取响应对象
    r = requests.get(img_url)
    # 从对象中获取资源
    data = r.content
    
    # 7.保存所有图片到本地
    with open(f'load/{i}.jpg', 'wb') as f:
        f.write(data)
        print(f"{i}.jpg保存成功!")

爬取图片方式2:

核心知识点:

  • 爬虫相关知识点

  • 正则表达式findall匹配

  • 列表的遍历

  • 枚举函数自动生成从0开始的编号: enumerate()

  • 文件操作相关知识点

# 1.导包
import requests
import re
# 2.准备有效的url
url = 'http://192.168.86.44:9091/'
# 3.发送请求,获取响应对象
response = requests.get(url)
# 4.从响应对象中提取数据
html_str = response.content.decode()
# print(html_str)
# 5.正则表达式匹配想要的数据
img_list = re.findall(', html_str)
print(img_list)
# 6.遍历图片列表,拼接url,批量发送请求获取资源
# 定义基础url
base_url = 'http://192.168.86.44:9091/'
for i,img_path in enumerate(img_list):
    # 拼接图片url
    img_url = base_url + img_path[3:]
    # 批量发送请求获取资源
    r = requests.get(img_url)
    # 从响应对象中提取数据
    data = r.content
    # 7.保存数据
    with open(f'load/图片/{i}.jpg', 'wb') as f:
        f.write(data)

3.爬取视频实战:

# 1.导包
import requests
import re
# 2.准备有效的url
url = 'http://192.168.86.44:9091/video.html'
# 3.发送请求,获取响应对象
response = requests.get(url)
# 4.从响应对象中提取数据
html_str = response.content.decode()
print(html_str)
# 5.正则表达式匹配想要的数据
video_list = re.findall(', html_str)
print(video_list)
# 6.遍历图片列表,拼接url,批量发送请求获取资源
# 定义基础url
base_url = 'http://192.168.86.44:9091/'
for i,video_path in enumerate(video_list):
    # 拼接图片url
    video_url = base_url + video_path[3:]
    # print(video_url)
    # 批量发送请求获取资源
    r = requests.get(video_url)
    # 从响应对象中提取数据
    data = r.content
    # 7.保存数据
    with open(f'load/视频/{i}.mp4', 'wb') as f:
        f.write(data)

4.爬取文本

爬取文本方式1:

核心知识点:

  • 爬虫相关知识点

  • 字符串切割方法: split()

  • 正则表达式match匹配

  • 列表的定义和遍历

  • if判断

  • list(zip(列表1, 列表2)) : 把两个列表中数据合并为 [(),(),…]

  • 文件操作相关知识点

# 1.导包
import requests
import re

# 2.准备有效的url
url = 'http://192.168.86.44:9091/gdp.html'
# 3.发送请求,获取响应对象
response = requests.get(url)
# 4.从响应对象中提取数据
html_str = response.content.decode()
print(html_str)
# 5.检索自己想要的数据
# 根据\n切割,把每行数据放到列表中
html_list = html_str.split('\n')
# 提前定义空列表,存储所有国家
country_list = []
gdp_list = []
# 遍历列表获取每行数据
for line in html_list:
    # 依次在每行数据中检索国家
    data = re.match('.*(.+).*', line)
    if data:
        country_list.append(data.group(1))

    # 依次在每行数据中检索gdp多少亿元
    data = re.match('.*¥(.+)亿元.*', line)
    if data:
        gdp_list.append(data.group(1))
# 验证是否爬取到数据
print(country_list)
print(gdp_list)
# 变成列表嵌套元组方式
# 注意: zip功能就是把两个列表中元素一一对应成组
gdp_data_list = list(zip(country_list, gdp_list))
# 6.保存数据
with open('load/文件/gdp.txt', 'w', encoding='utf8') as f:
    # 注意: write只能写字符,需要使用str转换
    f.write(str(gdp_data_list))

爬取文本方式2:

核心知识点:

  • 爬虫相关知识点

  • 正则表达式findall匹配

  • 正则表达式标志位修饰符: re.S

  • 文件操作相关知识点

# 1.导包
import requests
import re

# 2.准备有效的url
url = 'http://192.168.86.44:9091/gdp.html'
# 3.发送请求,并且获取响应对象
response = requests.get(url)
# 4.从响应对象中提取数据
html_str = response.content.decode()
# print(html_str)
# 5.检索自己想要的资源
gdp_data_list = re.findall('(.+?).*?¥(.+?)亿元', html_str, re.S)
print(gdp_data_list)
# 6.保存数据
with open('load/文件/gdp.txt', 'w', encoding='utf8') as f:
    f.write(str(gdp_data_list))
print('gdp数据保存成功!')

你可能感兴趣的:(Python爬虫,学习总结,python,大数据,爬虫)