【零基础学爬虫】用python爬取小说

2023-10-29


前言

之前因为想研究怎么让esp8266上校园网,折腾半天,请教大佬后,说要先学爬虫,就能知道怎么模拟登录上网了。大佬学的是c#,我学的是python,于是就开始学习了python爬虫,这是学习中觉得好玩的事,也遇到了不少困难。


一、先上效果图

在这里插入图片描述
在这里插入图片描述
这本书一共两千四百多章,一开始基本上爬到第1章(前面还有广告恰饭章)就报在这里插入图片描述
Remoto end closed connection without response 的错,估计被发现是爬虫了,弄了半天,总算爬取成功。

二、bs4学习

1.原理

bs4进行数据解析
bs4数据解析原理
1.实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中
2.通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据解析
 环境安装
# pip install bs4
# pip install lxml
#如何实例化BeautifulSoup对象
from bs4 import BeautifulSoup

2.运用

两种操作方式,我们一般用第二种爬取网页

	from bs4 import BeautifulSoup
    #1.将本地的html文档中的数据加载到对象中
    fp = open("./baidu.html",'r',encoding='utf-8')
    soup = BeautifulSoup(fp,'lxml')#创建一个lxml解析器
    # print(soup)
    #2.将互联网上获取的页面源码加载到该对象中
    #page_text = response.text
    #soup = BeatifulSoup(page_text,'lxml')

在这里插入图片描述

3.数据解析

    #提供用于数据解析
    #print(soup.a)#soup.tagName 返回的是html中第一次出现的tagName标签
    #print(soup.div)
    #print(soup.find('div'))   #等同于soup,div

4.属性定位

    #属性定位
    #print(soup.find('div',class_= "head_wrapper"))
    #print(soup.find_all('a'))# 返回符合要求的所有标签
    #select  select('某种选择器(id,class,标签,,,选择器)')
    #print(soup.select('.head_wrapper'))
    #print(soup.select(".head_wrapper > "))
    #soup.select('.tang > ul > li > a')[0] #层级选择
    #soup.select('.tang > ul  a')[0] #跨层选择 空格表示多个层级

5. 获取标签之间的文本数据

    #获取标签之间的文本数据
    print(soup.select('a')[0].string)   # 只可以获取该标签下面直系的文本内容
    print(soup.select('a')[0].get_text())#text/get_text()可以获取某一个标签中所有的文本内容
    print(soup.select('a')[0].text)

6.获取标签中的属性值

    #获取标签中的属性值
    #print(soup.select('.tang > ul > li > a')[0]['href'])

三、开始爬小说

一般步骤

聚焦爬虫 爬取页面中指定的页面内容
编码流程
指定URL
发起请求
获取响应数据
数据解析
持久化存储

在此之前,先要

pip instal requrests
import requrests

1、获取url

首先我选用笔趣阁的《凡人修仙传》作为爬取对象

url = 'https://www.qbiqu.com/7_7365/'

2 、UA伪装

然后,正常的ua伪装(User-Agent)用户代理,里面包含操作系统版本号和使用的浏览器,来伪装成一个正常的请求。按键盘上的F12 进入网站的开发者模式得到。(找不到可以尝试刷新页面)

#UA : User_Agent(请求载体的身份标识)
#UA检测 门户网站的服务器会检测对应请求的载体身份标识,如果监测到的载体身份标识为某一款浏览器
#说明该请求是一个正常的请求。但是如果检测到的载体身份标识不是基于某一款浏览器则表示该请求
#为不正常的请求(爬虫),则服务器就很可能拒绝该次请求

在这里插入图片描述

#UA伪装: 将对应的User-Agent封装到一个字典中
    headers = {
        "User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.1185.44'
    }

3、获取cookie

获取cookie
requests.session进行状态保持

requests模块中的Session类能够自动处理发送请求获取响应过程中产生的cookie,进而达到状态保持的目的。

   # 创建一个session,作用会自动保存cookie
    session = requests.session()

因为一直远程连接断开(Remoto end closed connection without response ),发现加上这句后,会好很多,用法和requests一样,requests.get();requrests.post();

4、请求网站

session.get(url,headers)

URL:Internet上的每一个网页都具有一个唯一的名称标识,通常称之为URL(Uniform Resource Locator, 统一资源定位器)。它是www的统一资源定位标志,简单地说URL就是web地址,俗称“网址”。

防止因为网络不好问题请求不到网站,我们使用while语句

    while(1):
        try:
            page_text = session.get(url= url,headers= headers)
            break
        except Exception as e:
            print(e)
            time.sleep(2)

5、完美解决爬取中文数据乱码问题

后来遇到中文报错问题

 page_text = page_text.text.encode('iso-8859-1').decode(’gbk‘) 

暂时这样解决了,可后来爬到三百二十六章是报了一个gbk编码格式不能编码的错,debug了一下
把要编码的格式传给decode,就不写死了。
在这里插入图片描述
于是用类的方法调用

    # #print(response.encoding)  #查看网页返回的字符集类型
    page_text = page_text.text.encode('iso-8859-1').decode(page_text.apparent_encoding) #完美解决爬虫中文数据乱码问题

6、在目录中获取详情页

在这里插入图片描述
class 用.box_con
id 用#list 获取

    #在首页中解析出章节的标题和详情页的url
    #1.实例化BeautifulSoup对象,需要将页面源码数据加载到该对象中
    soup = BeautifulSoup(page_text,'lxml')
    #解析章节标题和详情页的url
    dd_list = soup.select('.box_con > #list > dl > dd')
    #print(dd_list)
    #id和class都可以在网页中任何标签内使用。一般比较重要的部分、比较特别的盒子使用id,而小局部不重要的或小结构使用class。id调用css中以“#”井号命名的样式选择器,class调用css中以“.”英文半角小写句号命名的样式选择器。

dd_list 为标签dd的列表

    for dd in dd_list:
            #time.sleep(0.1)#解决requests.exceptions.ConnectionError问题
        title = dd.a.string

title 为《凡人修仙传的目录》

detail_url = 'https://www.qbiqu.com/'+dd.a["href"]#要补全

detail_url为目录的详情页

7、在详情页中获取小说内容

同样的方法,定位到div标签页下的id content
在这里插入图片描述
为了避免错误退出和网络不好的问题,和之前一样用了whie 和try,保证爬取成功才退出程序,因为session会保存之前的数据,所以不用再次session = requests.session()
还加上了time.sleep()延时,据大佬说不用加也没事。

        #对详情页发起请求,解析出章节内容
        while(1):
            try :
                detail_page_text = session.get(url = detail_url,headers = headers)#.text
                detail_page_text = detail_page_text.text.encode('iso-8859-1').decode(detail_page_text.apparent_encoding)
                #解析出详情页中相关的章节内容
                detail_soup = BeautifulSoup(detail_page_text,'lxml')
                div_tag = detail_soup.find('div',id = 'content')
                #解析到了章节的内容
                content = div_tag.text
                #print(content)
                fp.write(title +":" + content + "\n" )
                print(title,"爬取成功")
                time.sleep(3)
                break
            #time.sleep(3)
            except Exception as e :
                print(e)

8、持久化存储

fp = open('./fanrenxiuxian.txt','w',encoding='utf-8')

注意事项

如果你当前的网因为爬取多次,而被公网的ip被封了,就会这样
在这里插入图片描述
而其他网还能上,因为这个造成的
在这里插入图片描述
建议换个热点,换个网试试。
而其他博客说的
随机UA
代理ip
headers 加 ‘Connection’: ‘close’
博主一一试过,没什么用,最有效的方法就是获取cookie 和直接换热点
(为了这个我借了三个别人的热点)

四、小白常见问题

UA会被封吗?

大佬:ua不太可能封,因为ua是浏览器标识,同样浏览器在windows下会给出同样的ua,一封一大片,所有使用同一个操作系统,同一个浏览器的人都会是一样的ua,所以如果封了我的ua,就是拒绝所有在windows上用edge的人访问网站。
所以UA就获取自己浏览器下的就好。

封的是什么?

大佬:封你的公网ip,如果你用的njit,那就是学校的出口ip,整个学校都开不了。

爬虫君子协议

robots.txt协议
君子协议。规定了网站中哪些数据可以被爬虫爬取哪些数据不可以被爬取。在网址后加/robots.txt
淘宝君子协议

五、python代码

自写python代码

# -*- codeing = utf-8 -*-
# @Time : 2022/4/26 19:40
# @Auther : 顾家成
# @Fire .py
# @Software PyCharm
# -*- codeing = utf-8 -*-
# @Time : 2022/4/25 20:43
# @Auther : 顾家成
# @Fire .py
# @Software PyCharm
# 需求 爬取小说 笔趣阁《凡人修仙传》
import requests
#from urllib import request
from bs4 import BeautifulSoup
import time
import random
from random import randint


user_agent_list = [
    #"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",
    #"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
    # "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36",
    # "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
    # "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",
    # "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
    # "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.1185.50"
    #"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.1185.50"
    #"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36"
    ]

if __name__ == "__main__":


    headers = {
    #"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.1185.44'
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.1185.50",
    }
    # 创建一个session,作用会自动保存cookie
    session = requests.session()
    #headers['User-Agent'] = random.choice(user_agent_list)
    url = 'https://www.qbiqu.com/7_7365/'
    while(1):
        try:
            page_text = session.get(url= url,headers= headers)#.text
            break
        except Exception as e:
            print(e)
            time.sleep(2)
            #page_text = session.get(url=url, headers=headers)  # .text


    # #print(response.encoding)  #查看网页返回的字符集类型
    page_text = page_text.text.encode('iso-8859-1').decode(page_text.apparent_encoding) #完美解决爬虫中文数据乱码问题
    #print(page_text)
    #在首页中解析出章节的标题和详情页的url
    #1.实例化BeautifulSoup对象,需要将页面源码数据加载到该对象中
    soup = BeautifulSoup(page_text,'lxml')
    #解析章节标题和详情页的url
    dd_list = soup.select('.box_con > #list > dl > dd')
    #print(dd_list)
    #id和class都可以在网页中任何标签内使用。一般比较重要的部分、比较特别的盒子使用id,而小局部不重要的或小结构使用class。id调用css中以“#”井号命名的样式选择器,class调用css中以“.”英文半角小写句号命名的样式选择器。
    fp = open('./fanrenxiuxian.txt','w',encoding='utf-8')
    flag = 1
    for dd in dd_list:
            #time.sleep(0.1)#解决requests.exceptions.ConnectionError问题
        title = dd.a.string
        #print(title)
        detail_url = 'https://www.qbiqu.com/'+dd.a["href"]
        #对详情页发起请求,解析出章节内容
        while(1):
            try :
                #session = requests.session()#
                #headers['User-Agent'] = random.choice(user_agent_list)
                detail_page_text = session.get(url = detail_url,headers = headers)#.text
                detail_page_text = detail_page_text.text.encode('iso-8859-1').decode(detail_page_text.apparent_encoding)
                #解析出详情页中相关的章节内容
                detail_soup = BeautifulSoup(detail_page_text,'lxml')
                div_tag = detail_soup.find('div',id = 'content')
                #解析到了章节的内容
                content = div_tag.text#.split("    ")

                #print(content)
                fp.write(title +":" + content + "\n" )
                print(title,"爬取成功")
                time.sleep(3)
                break
            #time.sleep(3)
            except Exception as e :
                print(e)

        # for dd in dd_list:
        #     #time.sleep(0.1)#解决requests.exceptions.ConnectionError问题
        #     title = dd.a.string
        #     #print(title)
        #     detail_url = 'https://www.qbiqu.com/'+dd.a["href"]
        #     #对详情页发起请求,解析出章节内容
        #     detail_page_text = session.get(url = detail_url,headers = headers)#.text
        #     detail_page_text = detail_page_text.text.encode('iso-8859-1').decode('gbk')
        #     #解析出详情页中相关的章节内容
        #     detail_soup = BeautifulSoup(detail_page_text,'lxml')
        #     div_tag = detail_soup.find('div',id = 'content')
        #     #解析到了章节的内容
        #     content = div_tag.text#.split("    ")
        #     #print(content)
        #     fp.write(title +":" + content + "\n" )
        #     print(title,"爬取成功")



#'''

大佬用c#写了一个还更好,他的运行结果,还加上了双线程爬取。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【零基础学爬虫】用python爬取小说 的相关文章

  • 如何在 Jupyter Notebook 中运行 Python 异步代码?

    我有一些 asyncio 代码在 Python 解释器 CPython 3 6 2 中运行良好 我现在想在具有 IPython 内核的 Jupyter 笔记本中运行它 我可以运行它 import asyncio asyncio get ev
  • TensorFlow:带有轴选项的 bincount

    在 TensorFlow 中 我可以使用 tf bincount 获取数组中每个元素的计数 x tf placeholder tf int32 None freq tf bincount x tf Session run freq feed
  • 在 python 3 中使用子进程

    我使用 subprocess 模块在 python 3 中运行 shell 命令 这是我的代码 import subprocess filename somename py in practical i m using a real fil
  • Pyqt-如何因另一个组合框数据而更改组合框数据?

    我有一个表 有 4 列 这 4 列中的两列是关于功能的 一个是特征 另一个是子特征 在每一列中 所有单元格都有组合框 我可以在这些单元格中打开txt 我想 当我选择电影院作为功能时 我只想看到子功能组合框中的电影名称 而不是我的 数据 中的
  • Pandas dataframe:每批行的操作

    我有一个熊猫数据框df我想计算每批行的一些统计信息 例如 假设我有一个batch size 200000 对于每批batch sizerows 我想要一列的唯一值的数量ID我的数据框 我怎样才能做这样的事情呢 这是我想要的一个例子 prin
  • Python tkinter.filedialog Askfolder 干扰 clr

    我主要在 Spyder 中工作 构建需要弹出文件夹或文件浏览窗口的脚本 下面的代码在spyder中完美运行 在 Pycharm 中 askopenfilename工作良好 同时askdirectory什么都不做 卡住了 但是 如果在调试模式
  • 根据 Pandas 中的列表对多列进行排序

    感谢有关如何根据 pandas 中的倍数列表对给定多列进行排序的任何提示 如下所示 import pandas as pd sort a a d e sort b s1 s3 s6 sort c t1 t2 t3 df pd DataFra
  • 更改 x 轴比例

    我使用 Matlab 创建了这个图 使用 matplotlib x 轴绘制大数字 例如 100000 200000 300000 我想要 1 2 3 和 10 5 之类的值来指示它实际上是 100000 200000 300000 有没有一
  • 如何根据 HTTP 请求使用 Python 和 Flask 执行 shell 命令并流输出?

    下列的这个帖子 https stackoverflow com questions 15092961 how to continuously display python output in a webpage 我能够tail f网页的日志
  • 在相同任务上,Keras 比 TensorFlow 慢

    我正在使用 Python 运行斩首 DCNN 本例中为 Inception V3 来获取图像特征 我使用的是 Anaconda Py3 6 和 Windows7 使用 TensorFlow 时 我将会话保存在变量中 感谢 jdehesa 并
  • Alembic:如何迁移模型中的自定义类型?

    My User模型是 class User UserMixin db Model tablename users noinspection PyShadowingBuiltins uuid Column uuid GUID default
  • 揭秘sharedctypes性能

    在 python 中 可以在多个进程之间共享 ctypes 对象 然而我注意到分配这些对象似乎非常昂贵 考虑以下代码 from multiprocessing import sharedctypes as sct import ctypes
  • 如何使用 Bokeh 动态隐藏字形和图例项

    我正在尝试在散景中实现复选框 其中每个复选框应显示 隐藏与其关联的行 我知道可以通过图例来实现这一点 但我希望这种效果同时在两个图中发生 此外 图例也应该更新 在下面的示例中 出现了复选框 但不执行任何操作 我显然不明白如何更新用作源的数据
  • Pandas 堆积条形图中元素的排序

    我正在尝试绘制有关某个地区 5 个地区的家庭在特定行业赚取的收入比例的信息 我使用 groupby 按地区对数据框中的信息进行排序 df df orig groupby District Portion of income value co
  • 使用 NLP 进行地址分割

    我目前正在开发一个项目 该项目应识别地址的每个部分 例如来自 str Jack London 121 Corvallis ARAD ap 1603 973130 输出应如下所示 street name Jack London no 121
  • sqlite3从打印数据中删除括号

    我创建了一个脚本 用于查找数据库第一行中的最后一个值 import sqlite3 global SerialNum conn sqlite3 connect MyFirstDB db conn text factory str c con
  • Python对象初始化性能

    我只是做了一些快速的性能测试 我注意到一般情况下初始化列表比显式初始化列表慢大约四到六倍 这些可能是错误的术语 我不确定这里的行话 例如 gt gt gt import timeit gt gt gt print timeit timeit
  • OSX 上的 locale.getlocale() 问题

    我需要获取系统区域设置来执行许多操作 最终我想使用 gettext 翻译我的应用程序 我打算在 Linux 和 OSX 上分发它 但我在 OSX Snow Leopard 上遇到了问题 python Python 2 5 2 r252 60
  • bs4 `next_sibling` VS `find_next_sibling`

    我在使用时遇到困难next sibling 并且类似地与next element 如果用作属性 我不会得到任何返回 但如果用作find next sibling or find next 然后就可以了 来自doc https www cru
  • [cocos2d-x]当我尝试在 Windows 10 中运行“python android-build.py -p 19 cpp-tests”时出现错误

    当我尝试运行命令时python android build p cpp tests 我收到如图所示的错误 在此之前 我收到了另一条关于 Android SDK Tools 版本兼容性的错误消息 所以 我只是将 sdk 版本从 26 0 0

随机推荐

  • SpringMVC从入门到精通

    一 SpringMVC基础入门 创建一个HelloWorld程序 1 首先 导入SpringMVC需要的jar包 2 添加Web xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 7 8 9
  • Redis里的key过期了,为什么内存没有释放

    1 Redis过期策略定期删除和惰性删除 定期删除 Redis会每隔一段时间执行一次定期删除 但并不保证所有过期的key会被立即清理掉 惰性删除 当一个key被访问时 Redis会监测key是否过期 过期则删除并释放相应内存空间 2 解答
  • 什么是乐观锁,什么是悲观锁?

    在互联网公司面试中 很多小伙伴都被问到关于锁的理解 今天 我给小伙伴们来聊一聊我对锁的理解 不管我们互斥锁 自旋锁 重入锁 读写锁 行锁 表锁等等等等这些概念 我把他们都归纳为两种类型 乐观锁和悲观锁 彻底讲明白Java中眼花缭乱的各种并发
  • Bun v0.8.0 正式发布,Zig 编写的 JavaScript 运行时

    Bun 是采用 Zig 语言编写的高性能 全家桶 JavaScript 运行时 官方称其为 all in one JavaScript runtime 所谓 all in one 是因为 Bun 提供了打包 转译 安装和运行 JavaScr
  • 【推荐系统->统计学】辛普森悖论(Simpson‘s paradox)

    辛普森悖论 辛普森悖论 Simpson s paradox 也有其他名称 是概率和统计中的一种现象 即一种趋势出现在几组数据中 但当这些组组合在一起时 趋势就会消失或逆转 这个结果在社会科学和医学科学统计中经常遇到 并且当频率数据被过度地给
  • Zookeeper应用场景和底层设计

    一 什么是zookeeper Zookeeper是一个开源的分布式协调服务框架 它是服务于其它集群式框架的框架 简言之 有一个服务A 以集群的方式提供服务 只需要A专注于它提供的服务就可以 至于它如何以多台服务器协同完成任务的事情 交给Zo
  • eventEmitter.addListener与eventEmitter.on有什么区别

    eventEmitter addListener与eventEmitter on有什么区别 在 Node js 中 eventEmitter addListener 和 eventEmitter on 是等效的方法 它们都用于为事件注册监听
  • 面试官问“为什么应聘这个岗位”,应该如何回答?

    面试的时候 我们经常会被问到一个问题 为什么要来应聘这个职位 这是很多同学 不管是在校招还是社招里面都会碰到的一个场景 出现这种问题 一般来说有两种情况 一种是大学专业 或之前的实习经验 工作经验 跟这个职位的相关度不大 第二种情况是 跨越
  • mysql 可以承受多少人_mysql每秒最多能插入多少条数据 ? 死磕性能压测

    前段时间搞优化 最后瓶颈发现都在数据库单点上 问DBA 给我的写入答案是在1W 机械硬盘 左右 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高 SSD硬盘 但这东西感觉从来没证实过 故一时兴起 弄台虚拟机压测起来
  • HDLBits 系列(6)——Sequential Logic(Latches and Flip-Flops)

    目录 3 2 Sequential Logic 3 2 1 Latches and Flip Flops 1 D flip flop 2 D flip flops 3 DFF with reset 4 DFF with reset valu
  • AOP常用的几种增强方式,各自的特点(代码辅助)?

    1 前置增强 又称前置通知 前置增强使用 Befor注解标识 增强方法优先于目标方法执行 前置增强方法 Before execution int mul int int 执行方法之前执行下面的方法 public void before Jo
  • vue使用vant的list组件使用

    模板代码
  • 性能测试—性能测试方案设计思路总结

    一 需求分析 1 测试目的 为什么测 目的在于测试系统相关性能能否满足业务需求 通常分以下两种情况 1 新项目上线 2 老项目优化 如果是老项目优化 可考虑是否存有历史测试方案 如果有可以参考 或许可以省事很多 2 测试对象 要测啥 测试对
  • RK开发板的USB连接(Ubuntu)

    一 安装连接工具 sudo apt get install putty 二 启动putty工具 sudo putty 三 连接usb 并查看相关的信息 查看接入的是否有usb ls dev tty 显示如下 含有usb接口 dev ttyU
  • JVM的GC ROOTS有哪些?

    jvm垃圾回收是根据可达性分析算法来判断堆里面的对象是否有用 可达性分析算法是从GC ROOTS扫描对象引用链 来筛选出有用的对象 扫面完成后 回收掉无用的对象 jvm的GC ROOTS有哪几个地方呢 1 虚拟机栈 局部变量表中引用的对象
  • 寒假训练 第三节 数据结构基础 总结

    栈 基本操作 1 判断栈空 2 判断栈满 3 进栈 4 出栈 判断栈空 操作 s gt top 1 当栈顶指向 1时说明该栈为空 判断栈满 操作 s gt top MAXEN 1 当栈顶为栈长减一时说明栈为满 进栈 s gt top s g
  • react-native之ART绘图详解

    背景 在移动应用的开发过程中 绘制基本的二维图形或动画是必不可少的 然而 考虑到Android和iOS均有一套各自的API方案 因此采用一种更普遍接受的技术方案 更有利于代码的双平台兼容 art是一个旨在多浏览器兼容的Node style
  • PF_INET AF_INET

    http blog csdn net csdn zc article details 7656445 在写网络程序的时候 建立TCP socket sock socket PF INET SOCK STREAM 0 然后再绑定本地地址或连接
  • 【C语言】简易登录注册系统(登录、注册、改密、文件操作)

    概述 本登录注册系统通过使用C语言中的结构体 函数 文件操作以及指针等 设计与实现了一个小型用户登录注册系统的登录 注册 修改密码等基本功能 本系统全部功能基本运行良好 用户界面友好 操作简单 使用方便 但系统仍然有不完善之处 例如在隐藏用
  • 【零基础学爬虫】用python爬取小说

    文章目录 前言 一 先上效果图 二 bs4学习 1 原理 2 运用 3 数据解析 4 属性定位 5 获取标签之间的文本数据 6 获取标签中的属性值 三 开始爬小说 一般步骤 1 获取url 2 UA伪装 3 获取cookie 4 请求网站