最全python爬虫(含python基础知识复习)_python期末爬虫,2024大厂面试合集

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

在这里插入图片描述
8. 运算符和表达式

算术运算符
//a=10 b=21
在这里插入图片描述
比较运算符
//a=10 b=20
在这里插入图片描述
赋值运算符
//a=10 b=20
在这里插入图片描述位运算符
在这里插入图片描述
逻辑运算符
//a=10 b=20
在这里插入图片描述
成员运算符
在这里插入图片描述
运算符的优先级
在这里插入图片描述
9.转义字符
在这里插入图片描述在这里插入图片描述

print("mrirni\nguxnk")
print(r"mrirni\nguxnk") #加r就不会转义了


2.2 关键字

1.定义

  • 关键字:具有特殊功能的标示符,不允许开发者自己定义;
  • 标识符:就是用户自己定义的一些变量名称 ;

2.常用的关键字

andasassertbreakclasscontinuedefdelelseelifexcept
execfinallyforfromifinwhileimportislambdanot
orpassprintraisereturntrywhilewithyield

查看关键字
import keyword
keyword.kwlist

在这里插入图片描述
3.逻辑判断语句
if …else ; if…elif…elif…else

score = 77
if score >= 90:
    print("优秀")
else:
    print("不优秀")



4.条件循环语句
for i in range()
while

#for
for i in range(5): #从0到4
    print(i)
    
for j in range (1,10,2): #从1到9 步长为2
    print(j)
    
name = "meini"
for i in name:  #逐个遍历字符串
    print(i,end="\t")
   
a = ["aa","bb","c"] #遍历列表
for i in range(len(a)):
    print(i,a[i])


#while
i=0
while i<5:  #等于for i in range(5)
    print(i)
    i +=1


5. break、continue、pass

  • break:之间跳出循环体
  • continue:跳出满足当前条件的一次循环,后边的循环接着执行;
  • pass:空语句,占位
2.3 不同数据对象的操作

1.字符串(String)

  • Python中的字符串可以使用单引号,双引号和三引号括起来;
  • 支持字符串拼接;
  • 默认unicode字符串;
word = '字符串'
sentence = "这是一个句子"
paragraph = """
这是一个段落,
可以直接换行
哈哈哈
"""


字符串的切片功能:
[起始位置:结束位置:步进值]
注:字符串第一个元素饿下标为0

str = "abcdef"
print(str[0:3])  #输出前三个字母 abc
print(str[0:5:2]) #步长为2 ace
print(str[:3]) #前三个 abc
print(str[3:]) #第三个元素之后的  def
print(str[::-1]) #字符串的反转 fedcba


字符串的拼接功能

str1 = "zlj"
str2 = "meini"
print(str1*3) #连续打印三次
print(str1+str2) #将两个字符串连接起来


2.列表(List)

  • 列表可以完成大多数集合类的数据结构实现。
  • 列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
  • 列表索引值以О为开始值,-1为从末尾的开始位置
  • 列表可以使用+操作符进行拼接,使用*表示重复。

list = [123,'ab',"meini",70.2,[1,"p"]]  #列表中的元素类型可以不同
print(list[:3]) #切片 (左闭右开)
print(list[4][1]) #嵌套输出


列表的常用操作:
在这里插入图片描述
在这里插入图片描述
3.元组(Tuple)

  • tuple与list类似,不同之处在于tuple的元素不能修改。
  • 元组的元素不可变,但可以包含可变对象,如list。
  • 注意:定义一个只有1个元素的tuple,必须加逗号;
t0 = () #创建一个空元组
t1 = (1,) #定义一个元素的元组后边必须加逗号
t2 = ('a','b','c','d') #不能修改元组中的元素 如t2[1]=0
t3 = ('m','n',100,['L','J']) #在元组中定义数组,可以修改数组

print(t3[2])   #查
print(t3[-1])  #倒着查
#t3[0]=2    #改 报错 元组不能修改
t3[3][1]='z' #可以改元组中的列表
del t0    #删除 可以删除整个元组但不能删除单个值


4. 字典(dict)

  • 字典是无序对象集合,使用键-值(key-value)存储,具有极快的查找速度;
  • 键key必须使用不可变类型;
  • 同一个字典中,键key必须是唯一的;
d1 = {'meini':22,'longjie':24}  #字典的定义
print(d1['meini'])              #访问字典(通过键找值)
print(d1.get('longjie'))
print(d1.get('h','没有'))  #通过get可以设置默认值 访问字典中没有的键就返回默认值

d1["xiaohu"] = 21  #增
d1["xiaohu"] = 82   #改
del d1['meini']   #删
#d1.clear()  #清空所有元素
print(d1.keys())  #输出所有的键
print(d1.values()) #输出所有的值 列表形式
print(d1.items()) #输出每个键值对

for key,value in d1.items(): #遍历所有的键值对
    print("键=%s, 值=%s"%(key,value))

mylist = ["a","b","c"]
print(enumerate(mylist)) #枚举
for i,x in enumerate(mylist): #采用枚举的形式可以同时拿到列表的元素和对应的下标
    print(i,x)


5. 集合(set)

  • set和dict类似,也是一组key的集合,但set不存储value;
  • 在集合中也没有重复的键,重复元素会在set中自动过滤(去除);
  • 集合是无序的;
  • set可以是数学意义上的无序集合,所有可以执行并|、差-、交&操作
s = set([1,2,3])
print(s)                #{1, 2, 3}
s1 = set([1,1,1,2,2,3,2,3])
print(s1)               #{1, 2, 3}


在这里插入图片描述

2.4 python中的一些库

关键字:import
使用:import 或form … import 来导入相应的模块
将整个模块(比如:math)导入的格式:import math
从某个模块中导入单个函数格式:from math import pow
从某个模块中导入多个函数格式:from math import pow,sqrt
import this (python之禅)

说明
random随机库
math数学库
2.4 函数

1.概念
为了提高编写效率以及对代码进行重复利用,可以把具有独立功能的代码块组织成一个小的模块,这就是函数;
2.函数的定义

def 函数名 ():
    代码


def add(x,y):       #加法函数
    return x+y
    
num = add(12,5)
print(num)    #17


4.常用的系统函数
字符串相关

函数说明
lower()把所有字符换成小写
upper()把所有字符换成大写
swapcase()大小写互换
capitalize()将字符串的第一个字符转换为大写
title()把每个单词首字母大写,他是以所有英文字母的字符来区别是否为一个单词的
strip()默认去掉字符串左右两边的空白
replace()替换掉字符串中的指定内容
bytes.decode(encoding=“utf-8", errors=“strict”)Python3中没有decode方法,但我们可以使用bytes对象的decode()方法来解码给定的 bytes对象,这个 bytes 对象可以由str.encode()来编码返回
encode(encoding=‘UTF-8’ ,errors=‘strict’)以encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError的异常,除非errors指定的是’ignore’或者’replace"
2.5 文件操作

1.文件
文件,就是把一些数据存放起来,可以让程序下一次执行的时候直接使用。
2. 文件使用命令(基础)

访问操作命令例子
打开文件open(文件名,访问模式)f = open(‘text.txt’)
关闭文件文件对象.close()f.close()
读取文件文件对象.read()f.read()
写入文件文件对象.write(“内容”)f.write()
#文件的创建、写入、关闭;
f = open("text.txt")    #打开文件,默认读取模式(如果文件本身不存在就会报错)
f = open("text.txt","w")  #打开文件,写模式 文件不存在会自动新建
f.write("hello,ajau,i am coming~") #将字符串写入文件
f.close()   #关闭文件


#文件的打开、读取、关闭;
#read方法,读取指定的字符,开始定位在文件头部,每执行一次向后移动指定字符数
f = open("text.txt","r")  #打开文件,读取模式
content = f.read()		#全部读取
s = f.read(5)	       #只读取五个字符
l = f.readline()		#读取一行 
ls = f.readlines()		#读取文件所有行以列表显示

print(content) 		#hello,ajau,i am coming~
print(s)			#hello
print(l)			#hello,ajau,i am coming~
print(ls)			#['hello,ajau,i am coming~']

f.close()   #关闭文件


访问模式说明
r只读方式打开文件,文件的指针放在文件的开头(默认模式)
w打开文件只用于写入,文件存在则将其覆盖,文件不存在则创建
a打开文件用于追加,文件存在指针放在文件结尾,不存在则创建并写入
rb以二进制格式打开文件用于只读,文件的指针放在文件的开头(默认模式)
wb以二进制格式打开文件用于写入,文件存在则将其覆盖,文件不存在则创建
ab以二进制格式打开文件用于追加,文件存在指针放在文件结尾,不存在则创建并写入
r+打开一个文件用于读写,文件指针放在文件的开头
w+打开一个文件用于读写,文件存在则将其覆盖,文件不存在则创建
a+同上
rb+
wb+
ab+

3.文件相关操作(模块)

os模块功能:实现文件重命名、删除等一些操作

import os #导入模块


相关操作命令例子
文件重命名rename(需要修改的文件名,新文件名)os.rename(“test.txt”,“经典语录.txt”)
删除文件remove(待删除的文件名)os.remove(”test.txt“)
创建文件夹mkdir(“文件夹名称”)os.mkdir(“我的文件家”)
获取当前目录getcwd()os.getcwd()
2.6 异常处理

异常:程序运行发生中断或者结果异常等

1. for example:
操作

f = open("nini.txt","r")
s = f.read()
print(s)


结果:
在这里插入图片描述
原因:

打开一个不存在的文件时,系统会抛出一个IOError类型的错误,表示文件不存在不看打开或读取;

2. 解决异常

“当我们要进行一个不确定的操作,这个操作可能存在一定的风险,为了使系统不报错,我们可以采用一些py语句(try-except)来试探。”
注:捕获异常类型需要一致

还是那个栗子:

try:            #尝试进行的操作
    f = open("nini.txt","r")
    s = f.read()
    print(s)
except IOError:     #预判可能出现的问题,如果出现这个问题进行以下操作
    pass            #空过,do nothing


运行结果:
在这里插入图片描述
原因:

因为事先捕获异常,对于异常进行了预判和处理,执行结果就按异常处理代码(pass)执行

3.解决不明异常的方法

#不确定的异常,可以在捕获中全部列举出来
try:
    f = open("nini.txt","r")
    s = f.read()
    print(s)
    print(num)
except (IOError,NameError) as result:   #result 错误信息原因
    print("有异常")
    print("这个异常是:%s"%result)



#简单的方法:所有异常都可以用Exception来表示
try:
    f = open("nini.txt","r")
    s = f.read()
    print(s)
    print(num)
except Exception as result: #Exception可以承接所有异常
    print("有异常")
    print("这个异常是:%s"%result)


4.try…except…finally嵌套

try:
    print(num)
except Exception as result:
    print("有异常")
    print("这个异常是:%s"%result)
finally:
    print("我不管任务完毕 玩去了~hh")


3. python爬虫

3.1 爬虫介绍

1.什么是爬虫?
网络爬虫,是按照一定的规则,自动抓取互联网信息程序或者脚本。由于互联网的数据的多样性和资源有限性,根据用户的需求定向抓取相关网页并分析已经成为如今主流的爬取策略。
2.爬虫可以干啥?
可以爬图片、视频、文字等;
ps:你在浏览器上可以访问到的数据都可以通过爬虫获取;
3.爬虫的本质?
模拟浏览器打开网页,获取网页中我们想要的那部分数据。
4. 搜索引擎的功能
在这里插入图片描述

3.2 任务介绍(movie)

爬取电影网站的基本信息,包括电影名称、评分、评价数、电影概况、电影链接等。
电影网址: https://movie.douban.com/top250

3.3 基本流程
3.3.1 准备工作:

通过浏览器查看分析目标网页,学习编程基础规范;

1.URL分析

  • 页面包括250条电影数据,分10页,每页25条
  • 每页的URL的不同之处:最后的数值=(页数-1)*25

第一页:https://movie.douban.com/top250?start=0&filter=

第二页:https://movie.douban.com/top250?start=25&filter=

最后一页:https://movie.douban.com/top250?start=225&filter=

2.网页源代码
当我门利用爬虫给服务器发送浏览器地址,服务器去会模拟我们人去访问那个网址,服务器端看到的其实是网页的源代码;
在这里插入图片描述
3.分析页面

定位内容 :借助chrome工具(F12)来分析网页,在Elements下找到所需要的数据位置;

定位标题:
定位标题
响应过程:(Network)
在这里插入图片描述
分析发送报文和响应报文
在这里插入图片描述

4.规范编码

  • 一般Python程序第一行需要加入以下代码,这样可以在代码中包含中文;
#-*-coding: utf-8-*-或者# coding=utf-8


  • 在Python中,使用函数实现单一功能或相关联功能的代码段,可以提高可读性和代码重复利用率。
  • Python文件中可以加入main函数用于测试程序
if _name_ == "_main_" :   


对于if name == "main"的解释:https://blog.csdn.net/heqiang525/article/details/

5.引入模块

模块( module ):用来从逻辑上组织Python代码(变量、函数、类),本质就是py文件,提高代码的可维护性。Python使用import来导入模块

from 包 import 模块


引入自定义模块
在bugstudy文件夹下的test文件里创建一个test文件,文件包含add函数
在这里插入图片描述
在其他文件加调用此加法函数
在这里插入图片描述

爬虫所需要引入的一些系统模块

模块功能代码说明
import sys
网页解析,获取数据import bs4
正则表达式,进行文字匹配import re
指定URL,获取网页数据import urllib
进行excel操作import xlwt
进行数据库操作import sqlite3

安装包过程

在cmd界面直接按照在程序文件夹路径下:
语句:pip3 install 包 --target=E:\pabug\venv\Lib\site-packages

在这里插入图片描述

3.3.2 获取数据

通过http库向目标站点发起请求,请求可以包含额外的header等信息,如果服务器正常响应,就会得到一个reponse,便是所要获取的页面。

1. 获取页面数据

  • 对于每一个页面,调用askURL函数来获取页面内容;
  • 定义一个获取页面的函数askURL,传入一个url参数,表示网站,如:https://movie.douban.com/top250?start=0&filter=
  • urllib2.Request生成请求(urllib2.urlopen发送请求获取响应;read获取页面内容);
  • 在访问页面如果发生错误,为了保障程序正常运行,加入异常捕获(try-except)语句;

2.urllib库

“python中使用urllib2库获取页面”

urllib模块 :python内置的一个http请求库,不需要额外安装,只需要关注请求链接,参数,提供强大的解析功能。

import urllib	#导入urllib模块


URL模块代码
请求模块urllib.request
异常处理模块urllib.error
解析模块urllib.parse

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值