python爬虫的小题目
前言
本文只是想记录一下前几天考试的一道练习,题目并不难,主要就是看对于python爬虫中数据解析几个库的灵活使用
题目
爬取百度贴吧热议榜单,获取其中的标题及内容个数
解析题目可知,我们需要获取的是当天百度贴吧的热议榜单的标题和内容个数,我们需要先知道热议榜单的url是什么
这时我们需要对于百度贴吧的页面进行分析
贴吧的网页主页url是https://tieba.baidu.com/
而我们浏览主页面就能发现
这个部分,我们点击查看榜单进入就能拿到热议榜的url为:http://tieba.baidu.com/hottopic/browse/topicList?res_type=1&red_tag=v1884297849
拿到url后我们就可以对页面发起请求,而我们要获取的内容是热议榜页面的热议标题和内容数
也就是这两个数据
我们这时就可以去查看页面网页代码结构了
其中标题和内容分别在topic-name标签下的topic-text和topic-num标签的内容中
因为这两个标签是平行存在的使用bs4可能无法很方便的合并数据,所以尝试后,在数据解析阶段我选择的是使用xpa ...
pycharm中配置Anaconda
前言
本文只是介绍一下安装好anaconda后,要怎么在pycharm里配置使用
配置开始
打开pycharm -->File–>settings
找到自己的项目配置 project:你的项目名
选择第一个Project Interpreter
页面大概是这样的
添加页面如下:
选择好后,返回之前的页面选择apply和ok即可
这样你的pycharm中的python就是anaconda提供的,可以使用anaconda中各种自带的科学计算库
关于anaconda的安装,可以看我之前的博客文章.这里放出链接:
https://www.nghqqa.cn/2019/09/15/Anaconda%E7%9A%84%E5%AE%89%E8%A3%85/
python的函数式编程(一)--函数参数
前言
之前学习了python的基础语法,现在到函数了
函数
函数定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
特性:
减少重复代码
使程序变的可扩展
使程序变得易维护
函数结构:
def 函数名(): 函数体
def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。
def 是固定的,不能变,他就是定义函数的关键字。
函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并且要具有可描述性
括号:是必须加的,先别问为啥要有括号,总之加上括号就对了(下面就会讲到)!
下面的函数体一定全部都要缩进,这代表是这个函数的代码。
函数的调用
在定义好函数后,使用函数名加小括号就可以调用了 写法:函数名() 这个时候函数的函数体会被执行
def calc(x,y): res = x**y return res #返回函数执行结果c=calc(5,6)print(c)
运行结果为
15625
函数参数
函数的参数分为两种:形参变量和 ...
python基础(九)--文件操作
前言
本文承接上文
计算机系统分为:计算机硬件,操作系统,应用程序三部分。
我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来
python的文件操作
本文的文件操作基于windows其他操作系统可能有所不同
打开文件
在python中打开文件是的语法是
open(file, mode='r', buffering=-1, encoding_=None, errors=None, newline=None, closefd=True, opener=None)
我们一般是用的到前几个参数
file 要打开的文件的名字(路径)
mode代表操作文件的模式:
r 表示只读的
w 表示是可写的,使用w来写入文件时,如果文件不存在会创建文件,如果文件存在则会截断文件
截断文件指 ...
python基础(八)--集合和hash介绍
前言
本文承接上文
集合
python中的集合,和数学中的集合概念一样,用来保存不重复的元素,即集合中的元素都是唯一的,互不相同。
同一集合中,只能存储不可变的数据类型,包括整形、浮点型、字符串、元组,无法存储列表、字典、集合这些可变的数据类型
集合的特点
去重,把一个列表变成集合,就自动去重了。
关系测试,测试两组数据之前的交集、差集、并集等关系。
创建集合
直接创建或者set创建
set1 = set({1,2,'hello'})set2 = {1,2,'hello'}print(set1,set2)print(type(set1),type(set1))
运行结果为
{1, 2, 'hello'} {1, 2, 'hello'}<class 'set'> <class 'set'>
增加操作
增加有add,update两种方法
而update将一个集合中的元素添加到当前集 ...
python基础(七)--字典
前言
本文承接上文
字典
字典(dict)是一种无序的、可变的序列,它的元素以“键值对(key-value)”的形式存储。相对地,列表(list)和元组(tuple)都是有序的序列,它们的元素在底层是挨着存放的。
而字典和列表最大的不同在于
列表可以存储大量的数据类型,但是如果数据量大的话,他的查询速度比较慢。
列表只能按照顺序存储,数据与数据之间关联性不强。
而这里需要引入一个概念,什么数据类型是可变的
不可变(可哈希)的数据类型:int,str,bool,tuple。
可变(不可哈希)的数据类型:list,dict,set。
而字典作为python中的映射类型,他是以{}括起来,里面的内容是以键值对的形式储存的:
Key: 不可变(可哈希)的数据类型.并且键是唯一的,不重复的。
Value:任意数据(int,str,bool,tuple,list,dict,set)
哈希(hash)这个概率后面会提,这里先当一个概念知道就行
而映射关系大概和下图相似:
字典的主要特征:
主要特征
解释
通过键而不是通过索引来读取元素
字典类型有时 ...
python基础(六)--for循环和元组
前言
本文承接上文
for循环
之前我们提到过for循环是循环的一种,之前没有直接讲,是因为python中的for循环和其他语言的有一点不一样
for常用于遍历字符串、列表、元组、字典、集合等序列类型,逐个获取序列中的各个元素。
for循环的语法:
for 迭代变量 in 字符串|列表|元组|字典|集合: 代码块
格式中,迭代变量用于存放从序列类型变量中读取出来的元素,所以一般不会在循环中对迭代变量手动赋值
流程如图:
例如:
for循环循环字符串
url= "https://www.nghqqa.cn/"#for循环,遍历 url字符串for i in url: print(i,end="")
运行结果为
https://www.nghqqa.cn/
for循环列表
my_list = [1,2,3,4,5]for i in my_list: print('sum =', i)
运行结果为
sum = 1sum = 2sum = 3sum ...
python基础(五)--列表
前言
本文承接上文
列表(list)
之前我们提到过字符串,布尔值,数字,在这几种数据类型中也只有字符串可以用来存储数据,
那么如果有大量数据的存储需求,我们用字符串来存储够用吗
答案肯定是不够的
先说字符串
字符串只能存储少量的数据,对于大量的数据用字符串操作不方便也不易存储。
字符串存储的数据类型太单一,只能是字符串类型。
这个时候如果有其他语言基础的读者肯定能想到使用数组来作为数据的存储类型
但在python中,并不像java一样存在数组类型,而代替数组的在python中就是列表了
列表的特点:
1.可存放多个值
2.按照从左到右的顺序定义列表元素,下标从0开始顺序访问,有序
3.可修改指定索引位置对应的值,可变
列表的创建
列表的创建,是通过[]来创建列表(也可以通过强制类型转换list()来创建)
my_list = [] # 创建了一个空列表
而在列表中存储的数据,被称为元素
my_list = [10] # 创建一个只包含一个元素的列表
在当向列表中添加多个元素时,多个元素之间使用,隔开
my_list = [10,20,30,40,50] # 创建了一个包含 ...
python基础(四)--序列
前言
本文承接上文
序列(sequence)
所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们。
而前面提到的字符串就是序列的一种
在 Python 中,序列类型包括字符串、列表、元组、集合和字典,这些序列支持以下几种通用的操作,但比较特殊的是,集合和字典不支持索引、切片、相加和相乘操作。
序列索引
序列中,每个元素都有属于自己的编号(索引)。从起始元素开始,索引值从 0 开始递增,如图 所示:
除此之外,Python 还支持索引值是负数,此类索引是从右向左计数,换句话说,从最后一个元素开始计数,从索引值 -1 开始,如下图所示:
序列切片
切片操作是访问序列中元素的另一种方法,它可以访问一定范围内的元素,通过切片操作,可以生成一个新的序列。
序列实现切片操作的语法格式如下:
sname[start : end : step]
其中,各个参数的含义分别是:
sname:表示序列的名称;
start:表示切片的开始索引位置(包括该位置),此参数也可以不指定,会默认为 0,也就是从序列的开头进行切片;
en ...
python基础(三)--while循环
前言
本文承接上文
循环语句
循环语句可以使指定的代码块重复指定的次数
循环语句分成两种,while循环 和 for循环
while循环语法格式:
while 条件表达式: 代码块else: 代码块
执行流程:
while语句在执行时,会先对while后的条件表达式进行求值判断,
如果判断结果为True,则执行循环体(代码块),
循环体执行完毕,继续对条件表达式进行求值判断,以此类推,
直到判断结果为False,则循环终止,如果循环有对应的else,则执行else后的代码块
执行流程:
while语句在执行时,会先对while后的条件表达式进行求值判断,
如果判断结果为True,则执行循环体(代码块),
循环体执行完毕,继续对条件表达式进行求值判断,以此类推,
直到判断结果为False,则循环终止,如果循环有对应的else,则执行else后的代码块
流程图如下:
而在使用while循环是存在一个问题,当你的while语句的条件一直成立是,你的while语句下的代码块会一直执行,这也就成为了死循环.
例如:
while True : print('hello ...