首页 > 其他分享 >13_爬虫入门

13_爬虫入门

时间:2022-10-17 18:26:02浏览次数:44  
标签:gdp 13 入门 img get url 爬虫 content html

爬虫

1.回顾web服务器

知识点:

fastapi和uvicorn配合搭建web服务器:
    0.先安装fastapi和uvicorn
    1.导包
    2.创建fastapi对象
    3.处理web数据(请求和响应)
    4.启动服务器

示例:

# 1.导包
from fastapi import FastAPI
from fastapi import Response
import uvicorn
# 2.创建fastapi对象
app = FastAPI()
# 3.处理web数据(请求和响应)
@app.get('/') # 自动跳转首页 http://127.0.0.1:8081/
def show():
    with open('source/html/index.html','rb') as f:
        body = f.read()
    return Response(content=body)

@app.get('/{html_path}') # 跳转指定页面
def show(html_path):
    with open(f'source/html/{html_path}','rb') as f:
        body = f.read()
    return Response(content=body)

@app.get('/images/{img_path}') # 跳转指定图片
def show(img_path):
    with open(f'source/images/{img_path}','rb') as f:
        body = f.read()
    return Response(content=body)

# 4.启动服务器
uvicorn.run(app,host='127.0.0.1',port=8081)

2.爬虫入门

知识点:

网络爬虫: (网页蜘蛛,网络机器人)模拟人去浏览器发送请求,接收响应数据,然后根据需求获取对应的资源

注意: 理论上,爬虫能爬到的数据就是浏览器能展示出来的数据

python中requests模块简介: python编写的开源的http库

python中requests模块作用:  通过requests模块里的代码,模拟人去浏览器发送请求

爬虫步骤
    1: 准备好url
    2: 根据url发送请求,获取响应数据
    3: 处理响应数据
    4: 保存数据

爬取自己服务器页面:

# 1.准备url
import requests

url = 'http://127.0.0.1:8081/'
# 2.发送请求,接收响应数据对象
res = requests.get(url)
print(res) # 响应对象
# 3.处理数据
body = res.content # 根据content属性获取响应体
print(body) # 响应体:二进制格式
html_str = body.decode()
print(html_str) # 响应体:字符串格式
# 4.保存数据

3.爬取自己服务器页面中图片

知识点:

findall: 如果涉及到多个分组,自动把所有分组的内容先放到元组中再放到列表中返回

.* : 贪婪模式  如果匹配成功的前提下,尽可能多的匹配

.*?: 非贪婪模式 如果匹配成功的前提下,尽可能少的匹配

爬取所有图片:

import re

import requests
# 1.准备有效的url

url = 'http://127.0.0.1:8081/index.html'
# 2.发送请求,接收响应数据对象
res = requests.get(url)
# 3.处理数据
html_str = res.content.decode()
print(html_str) # 测试完注释或者删除此行
# 通过正则去匹配所有的图片路径
img_list = re.findall('<img src="(.*?)"',html_str)
print(img_list)
base_url = 'http://127.0.0.1:8081'
# 遍历图片列表
a = 0 # 用于动态存储图片名
for i in img_list:
    # 获取每个图片url
    img_url = base_url+i[1:]
    # 依次发送图片请求
    img_data = requests.get(img_url).content  # 先获取到响应对象,再根据content属性获取内容
    # 4.保存数据
    with open(f'./load/{a}.jpg', 'wb') as f:
        f.write(img_data)
        a+=1 # 每用过1次后加1

4.爬取自己服务器的gdp数据

示例:

import re

import requests
# 1.准备有效的url
url = 'http://127.0.0.1:8081/gdp.html'
# 2.发送请求,接收响应数据对象
res = requests.get(url)
# 3.处理数据
html_str = res.content.decode() # 默认content接收的是二进制,decode()解码成字符串
print(html_str)
# 使用正则匹配数据
gdp_data = re.findall('<a href=""><font>(.*?)</font></a>.*?¥(.*?)亿元',html_str,re.S)
print(gdp_data)
# 4.保存数据
with open('./load/gdp.txt','w',encoding="utf8") as f:
    f.write(str(gdp_data))

5.爬虫的多任务版本

知识点:

多任务:  多进程和多线程

多进程模块: multiprocessing
进程类: Process

使用步骤: 必须放到main函数内
1.导包: import multiprocessing
2.创建子进程对象: 子进程对象 = multiprocessing.Process(target=任务名)
3.开启进程:      子进程对象.start()

多线程模块: threading
线程类: Thread

使用步骤: 
1.导包: import threading
2.创建子线程对象: 子线程对象 = threading.Thread(target=任务名)
3.开启线程:      子线程对象.start()

示例:

import multiprocessing
import re
import requests

# 任务1:爬取index页面中的所有图片
def get_img():
    # 1.准备有效的url
    url = 'http://127.0.0.1:8081/index.html'
    # 2.发送请求,接收响应数据对象
    res = requests.get(url)
    # 3.处理数据
    html_str = res.content.decode()
    # 通过正则去匹配所有的图片路径
    img_list = re.findall('src="(.*?)"', html_str)
    base_url = 'http://127.0.0.1:8081'
    # 遍历图片列表
    # 使用了enumerate以后a就是对应的索引012...
    for a, i in enumerate(img_list):
        # 获取每个图片url
        img_url = base_url + i[1:]
        # 依次发送图片请求
        img_res = requests.get(img_url)  # 先获取到响应对象
        img_data = img_res.content  # 再根据content属性获取内容
        # 4.保存数据
        with open(f'./load/{a}.jpg', 'wb') as f:
            f.write(img_data)
    print('图片保存完毕!')

# 任务2: 爬取gdp页面中gdp数据
def get_gdp():
    # 1.准备有效的url
    url = 'http://127.0.0.1:8081/gdp.html'
    # 2.发送请求,接收响应数据对象
    res = requests.get(url)
    # 3.处理数据
    html_str = res.content.decode()  # 默认content接收的是二进制,decode()解码成字符串
    # 使用正则匹配数据
    gdp_data = re.findall('<a href=""><font>(.*?)</font></a>.*?¥(.*?)亿元', html_str, re.S)
    # 4.保存数据
    with open('./load/gdp.txt', 'w', encoding="utf8") as f:
        f.write(str(gdp_data))
    print('gdp数据保存完毕!')

# 多任务
if __name__ == '__main__':
    # 1.创建进程对象
    p1 = multiprocessing.Process(target=get_img)
    p2 = multiprocessing.Process(target=get_gdp)
    # 2.开启进程
    p1.start()
    p2.start()


标签:gdp,13,入门,img,get,url,爬虫,content,html
From: https://www.cnblogs.com/nanguyhz/p/16800133.html

相关文章

  • 14_数据可视化入门
    数据可视化和程序日志一.数据可视化1.数据可视化简介echarts简介:是百度开源的数据可视化工具echarts特点:良好的交互性,精巧的图表设计pyecharts模块:echarts......
  • 11_正则表达式入门
    1.正则表达式入门正则表达式:regularexpression1.正则表达式概念:记录文本规则的代码(符号)2.正则表达式作用:匹配或者查找符合某些规则的字符串3.python中......
  • python学习记录:爬取优美图美女图片爬虫代码
     #爬取优美图图片importrequestsfrombs4importBeautifulSoupdomain='https://www.umei.cc'url='https://www.umei.cc/meinvtupian/waiguomeinv/'resp=request......
  • python学习记录:爬取起点小说信息保存到excel爬虫源码
     importxlwtimportrequestsfromlxmlimportetreeimporttimeimportxlsxwriterheaders={'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537......
  • python学习记录:爬取网易云音乐爬虫代码
    #爬取163音乐 importrequestsfromlxmlimportetreeurl='https://music.163.com/discover/toplist?id=3779629'domain='http://music.163.com/song/media/outer/ur......
  • Python入门篇--变量与数据类型
    目录​​......
  • 【Python】pyqt6入门到入土系列,非常详细...
    最近真的是运气不好,国庆前一天,隔壁小区有人中招了,结果国庆出不了门,好不容易国庆结束了,准备上班,结果小区又有个叼毛中招了,搞得我直接国庆放了半个月,还只能在家过,没事干只能......
  • [IOI2013]robots 机器人
    题目传送门思路简单题,设函数\(f_i\)表示当时间为\(i\)时是否能够收拾好所有玩具,则\(f_i\)显然是单调的。所以我们可以考虑二分。设我们当前二分到\(x\),我们先把......
  • Selenium4Web自动化1-自动化入门与环境搭建
    一、自动化测试基础1分层自动化测试  分层的自动化测试:从黑盒(UI)单层到黑盒和白盒多层的自动化测试,即从全面黑盒自动化测试到对系统的不同层次进行的自动化测试。1......
  • C语言零基础入门—函数-习题
    C语言零基础入门—函数-习题本节课的任务是:完成5道习题。下边的题目,都需要使用函数的知识来求解(也就是编写自定义函数求解)01-二元一次函数求解求方程​​ax^2+bx+c=......