python爬虫的一些代码

你好,欢迎查看我的第5个笔记。这是本人为了保存一些代码而写的博客,由于精力实在有限,无法从头开始介绍爬虫相关的知识故仅仅罗列了几段代码案例

 

1.编写url管理器

class UrlManager():
    """
    url管理器罢了
    """
    def __init__(self):
        self.new_urls=set()
        self.old_urls=set()

    def add_new_url(self,url):
        if url is None or len(url)==0:
            return
        if url in self.new_urls or url in self.old_urls:
            return
        self.new_urls.add(url)

    def add_new_urls(self,urls):
        if urls is None or len(urls)==0:
            return
        for url in urls:
            self.new_urls.add(url)

    def get_url(self):
        if self.is_has_url():
            url = self.new_urls.pop()
            self.old_urls.add(url)
            return url
        else:
            return None

    def is_has_url(self):
        return len(self.new_urls) > 0

要先创建一个包(utils),在里面建个py文件(url_manager),里面写上面的代码

像这样:

fe24ea42f44744c693a2316a2eac6173.png

 

2.爬取www.crazyant.net的全部标题网页

import requests
from bs4 import BeautifulSoup
from utils import url_manager
import re


fout=open("crazyant_all_pages.text","w")

root_url ="http://www.crazyant.net"#定义入口网站
urls=url_manager.UrlManager()#实例化UrlManager类
urls.add_new_url(root_url)#调用add_new_url()方法,把入口网站放在new_urls里面

while urls.is_has_url():#当new_urls里面有网站时
    cur_url=urls.get_url()#从newurls里面拿出一个网站
    r=requests.get(cur_url,timeout=3)#发送request,抓取r的信息
    soup=BeautifulSoup(r.text,"html.parser")#用html。parser解析r
    title=soup.title.string#抓取r的title信息
    print("success: %s,%s\n" % (cur_url, title))#打印cur_url 和 title
    fout.write("%s\t%s\n"%(cur_url,title))
    links=soup.find_all("a")#得到所有的a标签
    pattern=r'^http://www.crazyant.net/\d+.html$'#设置正则语句
    for link in links:##遍历每一个a
        href=link["href"]#得到每个a的链接
        if href is None or len(href)==0:
            continue
        if re.match(pattern,href) :
            urls.add_new_url(href)
fout.close()

注:www.crazyant.net是b站up主的个人博客,见下面链接[3.2]--Python爬虫实战爬取所有博客页面_哔哩哔哩_bilibili

附一张up主的主页图片

91c743fd3ce94685ba809a220ea4eb8a.png

 

3.爬取四川农业大学教务网的通知

import requests
from bs4 import BeautifulSoup
fout = open("jiaowu_Notice.text","w",encoding="utf8")
url ="https://jiaowu.sicau.edu.cn/web/web/web/gwmore.asp"
response=requests.get(url)
response.encoding="gb2312"
soup = BeautifulSoup(response.text,"html.parser")
form=soup.find("form",attrs={"method":"post"})
trs=form.find_all("tr",attrs={"class":"text-c"})
num=1
for tr in trs:
    links=tr.find("div",attrs={"align":"left"})
    if links is None or len(links) == 0:
        continue
    for link in links:
        try:
            href=link["href"]
            if href is None or len(href) == 0:
                continue
            print(f"{num}.  https://jiaowu.sicau.edu.cn/web/web/web/{href}\t{link.get_text()}\n")
            num+=1
            fout.write(f"{num}.\thttps://jiaowu.sicau.edu.cn/web/web/web/{href}\t{link.get_text()}\n")
        except:
            pass
fout.close()

4.爬取打印四川农业大学理学院所有的通知告示

import requests
from bs4 import BeautifulSoup
num=0
url_list=["https://lixueyuan.sicau.edu.cn/xwjtz/tzgg.htm"]
for n in [2,3]:
    url_list.append(f"https://lixueyuan.sicau.edu.cn/xwjtz/tzgg/{n}.htm")
for url in url_list:
    r=requests.get(url)
    r.encoding="utf8"
    soup=BeautifulSoup(r.text,"html.parser")
    lis=soup.find("div",attrs={"class":"newm"}).find_all("li")

    for li in lis:
        a=li.find("a")
        text_list=a.get_text().split("\n")
        text = text_list[1]
        time = text_list[2]
        href=a["href"].strip("..")
        num+=1
        print(f"{num}\thttps://lixueyuan.sicau.edu.cn{href}\t{time}\t{text}")

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<think>嗯,用户想了解如何使用YOLOv12并配合yolo12-cls.yaml文件进行配置或训练。首先,我需要确认YOLOv12的相关资料是否准确,因为目前官方可能还没有正式发布。根据用户提供的引用,YOLOv12的配置文件存放在ultralytics/cfg/models/v12目录下,包括不同规模的模型,如n、s、m、l、x。用户提到的yolo12-cls.yaml可能用于分类任务,类似YOLOv8的yolov8-cls.yaml。 首先,我应该解释配置文件的参数。YAML文件通常包模型的结构参数,比如backbone、neck、head的层数、通道数、激活函数等。可能需要参考YOLOv8的配置方式,因为YOLOv12可能延续类似的结构。比如,YOLOv8的配置文件有nc表示类别数,scales调整模型规模,depth和width控制深度和宽度。 然后,训练步骤方面,用户可能需要安装Ultralytics库,准备数据集,调整配置文件中的路径和参数,如batch_size、epochs、optimizer等。数据集的格式也很重要,分类任务通常需要按类别分文件夹存放图片。 用户可能遇到的问题包括配置文件路径错误、参数不匹配导致训练失败,或者数据集格式不正确。需要提醒他们检查这些部分,并参考官方文档或社区资源。 另外,用户提到的引用[1]和[2]分别关于YOLOv12模型配置和YOLOv8的不同用途配置文件,可能帮助用户理解YOLOv12的结构。需要确保在回答中正确引用这些信息,并建议用户查阅官方文档以获取最新信息。 最后,生成相关问题时要围绕配置文件的使用、训练技巧、参数调整、模型评估以及与其他版本的区别,这些都是用户可能进一步想了解的方面。</think>### YOLOv12 使用教程yolo12-cls.yaml 配置文件说明 #### 一、YOLOv12 基础配置 1. **配置文件路径** YOLOv12的配置文件位于`ultralytics/cfg/models/v12/yolo12-cls.yaml`[^1],主要包分类任务的网络结构定义。其核心参数包括: - `nc`: 分类任务的目标类别数 - `depth_multiple`: 网络深度缩放系数 - `width_multiple`: 通道数缩放系数 - `anchors`: 锚框配置(分类任务可能不需要) - `backbone`/`head`: 网络主干和头部结构 2. **典型配置示例** ```yaml # YOLOv12-cls.yaml depth_multiple: 1.0 # 控制模块重复次数 width_multiple: 1.0 # 控制通道数缩放 activation: silu # 激活函数类型 backbone: [[Conv, 64, 3, 2], # [通道数, 卷积核尺寸, 步长] [C2f, 128, 3, True], ...] ``` #### 二、训练流程 1. **环境准备** ```bash pip install ultralytics # 安装官方库 git clone https://github.com/ultralytics/ultralytics # 获取最新代码 ``` 2. **数据集配置** - 数据集目录结构应符合标准分类格式: ``` datasets/ train/ class1/ class2/ val/ class1/ class2/ ``` 3. **启动训练** ```python from ultralytics import YOLO model = YOLO('yolo12-cls.yaml') # 加载配置文件 results = model.train( data='imagenet.yaml', # 数据集配置文件 epochs=100, imgsz=224, batch=64 ) ``` #### 三、关键参数解析 | 参数 | 说明 | 典型值 | |------|------|--------| | `nc` | 类别数 | 1000 (ImageNet) | | `scales` | 模型规模控制 | n/s/m/l/x | | `depth` | 网络深度系数 | 0.33-1.0 | | `width` | 通道宽度系数 | 0.5-1.25 | #### 四、常见问题解决 1. **配置文件加载失败** 检查文件路径是否指向`ultralytics/cfg/models/v12`目录 2. **通道数不匹配错误** 确保`width_multiple`与输入通道数兼容,可通过公式计算: $$ \text{实际通道数} = \text{基准通道数} \times \text{width_multiple} $$ 3. **分类准确率低** 尝试调整学习率策略: ```yaml lr0: 0.001 # 初始学习率 lrf: 0.01 # 最终学习率系数 warmup_epochs: 3 # 学习率预热 ``` 建议参考官方文档中的通道匹配验证方法,并注意分类任务与检测任务的配置差异(如不需要锚框配置)[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值