外链论坛

 找回密码
 立即注册
搜索
查看: 47|回复: 2

从Python安装到语法基本,小白都能懂的爬虫教程!(附代码)

[复制链接]

2941

主题

412

回帖

9117万

积分

论坛元老

Rank: 8Rank: 8

积分
91179299
发表于 2024-8-17 12:14:59 | 显示全部楼层 |阅读模式

源自:大数据

作者:罗攀 蒋仟

本文约5000字意见阅读20分钟。

本文安身基本,讲解Python和PyCharm的安装,及Python最简单的语法基本和爬虫技术中所需的Python语法。

本文触及重点知识点如下:

Python和PyCharm的安装:学会Python和PyCharm的安装办法变量和字符串:学会运用变量和字符串的基本用法函数与掌控语句:学会Python循环、判断语句、循环语句和函数的运用Python数据结构:理解和运用列表、字典、元组和集合Python文件操作:学习运用Python创立文件并写入数据Python面向对象:认识Python中类的定义和运用办法

01 Python与PyCharm安装

“工欲善其事,必先利其器”,本节介绍Python环境的安装和Python的集成研发环境(IDE)PyCharm的安装。

1. Python安装(Windows、Mac和Linux)

当前主流的Python版本为2.x和3.x。因为Python 2第三方库更加多非常多向Python 3转移),企业广泛运用Python 2。倘若做为学习和科研的话,意见运用Python 3,由于它是将来的发展方向。因此本教程选取Python 3的环境。

1.1 Windows中安装Python 3

在Windows系统中安装Python 3,请参照下面的过程进行。

打开浏览器,拜访Python官网(https://www.python.org/)。光标移动至Downloads链接,单击Windows链接。按照自己的Windows版本(32位或64位),下载相应的Python 3.5版本,如为Windows 32位系统,应下载Windows x86 executable installer,倘若为Windows 64位系统,应下载Windows x86-64 executable installer。单击运行文件,勾选Add Python 3.5 to PATH,而后单击Install Now按钮就可完成安装。

在计算机中打开命令提示符(cmd)窗口,输入python,如图1.1所示,说明Python环境安装成功。

图1.1 运行Python环境

当界面显现提示符>>>时,就显示进入了Python交互式环境,输入代码后按Enter键就可运行Python代码,经过输入exit()并按Enter键,就能够退出Python交互式环境。

重视倘若显现错误,可能是由于安装时未勾选Add Python3.5 to PATH选项,此时卸载Python后重新安装时勾选Add Python3.5 to PATH选项就可

1.2 Mac中安装Python3

Mac系统中自带了Python 2.7,需到Python官网上下载并安装Python3.5。Mac系统中的安装比Windows更为简单,始终单击“下一步”按钮就可完成。安装完后,打开终端并输入Python3,就可进入Mac的Python3的交互式环境。

1.3 Linux中安装Python3

大部分Linux系统内置了Python2和Python3,经过在终端输入python–version,能够查看当前Python3的版本。倘若必须安装某个特定版本的Python,能够在终端中输入:

sudo apt-get install python3.5

2. PyCharm安装

安装好Python环境后,还必须安装一个集成研发环境(IDE),IDE集成为了代码编写功能、分析功能、编译功能和调试功能。在这儿向读者举荐一个最智能、好用的Python IDE,叫做PyCharm。进入PyCharm的官网,下载社区版就可

http://www.jetbrains.com/pycharm/

因为PyCharm上手极为简单,因此呢就不仔细讲解PyCharm的运用办法了。以下讲解怎样运用PyCharm相关Python解释器,让PyCharm能够运行Python代码。

打开PyCharm,在菜单栏中选取File ∣ Defalut Settings命令。在弹出的对话框中选取Project Interpreter,而后在右边选取Python环境,这儿选取Python 3.5,单击OK按钮,就可相关Python解释器,如图1.2所示。

图1.2 相关Python解释器

02 变量和字符串

本节重点介绍Python变量的概念、字符串的基本运用办法、字符串的切片和索引,以及字符串的几种常用办法

1. 变量

Python中的变量很好理解,例如:

a = 1

这种操作叫作为赋值,意思为将数值1赋给了变量a。

重视:Python中语句结束不必须以分号结束,变量不必须提前定义。

此刻有变量a和变量b,能够经过下面代码进行变量a、b值的对换。

a = 4 b = 5 t = a #把a值赋给t变量 a = b #把b值赋给a变量 b = t #把t值赋给b变量 print(a,b) # result 5 4

这种方法类似于将两个杯子中的饮料对换,只必须多加一个杯子,就可完成饮料的对换工作。

2. 字符串的“加法”和“乘法”

因为Python爬虫的对象大部分为文本,因此字符串的用法尤为重要。在Python中,字符串由双引号或单引号和引号中的字符构成首要经过下面代码瞧瞧字符串的“加法”:

a = I

b = love

c = Python

print(a + b + c) #字符串相加

# result I love Python

在爬虫代码中,会经常构造URL,例如,在爬取一个网页链接时,仅有一部分/u/9104ebf5e177,这部分链接是没法拜访的,还必须http://www.jianshu.com,此时能够经过字符串的“加法”进行合并。

重视:此网站为笔者的简书首页。

Python的字符串不仅能够相加,能够乘以一个数字:

a = word print(a*3) #字符串乘法 #result wordwordword

字符串乘以一个数字,意思便是将字符串复制这个数字的份数。

3. 字符串的切片和索引

字符串的切片和索引便是经过string[x],获取字符串的一部分信息:

a = I love python

print(a[0]) #取字符串第1个元素

#result I

print(a[0:5]) #取字符串第1个到第五个元素

#result I lov

print(a[-1]) #取字符串最后一个元素

#result n

经过图1.3就能清楚地理解字符串的切片和索引。

图1.3 字符串切片和索引

重视:a[0:5]中的第5个是不会选取的。

在爬虫实战中,经常会经过字符串的切片和索引,提取必须的部分,剔除有些必须的部分。

4. 字符串办法

Python做为面向对象的语言,每一个对象都有相应的办法,字符串同样持有多种办法,在这儿介绍爬虫技术中常用的几种办法

4.1 split()办法

a = www.baidu.com print(a.split(.)) # result [www, baidu, com]

字符串的split()办法便是经过给定的分隔符(在这儿为‘.’),将一个字符串分割为一个列表(后面将仔细讲解列表)。

重视倘若供给任何分隔符,程序会把所有的空格做为分隔符(空格、制表、换行等)。

4.2 repalce()办法

a = There is apples b = a.replace(is,are) print(b) # result There are apples

这种办法类似文本中的“查询和替换”功能。

4.3 strip()办法

a = python is cool print(a.strip()) # result python is cool

strip()办法返回去除两侧(不包含内部)空格的字符串,能够指定必须去除的字符,将它们列为参数中就可

a = ***python *is *good*** print(a.strip(*!)) # result python *is *good

这个办法只能去除两侧的字符,在爬虫得到的文本中,文本两侧常会有多余的空格,只需运用字符串的strip()办法就可去除多余的空格部分。

4.4 format()办法

最后,再讲解下好用的字符串格式化符,首要看以下代码:

a = {} is my love.format(Python) print(a) # result Python is my love

字符串格式化符就像是做选取题,留了空给做题者选取。在爬虫过程中,有些网页链接的部分参数是可变的,此时运用字符串格式化符能够减少代码的运用量。

例如,Pexels素材网(https://www.pexels.com/),当搜索照片时,网页链接出现变化。

如在搜索栏中输入book,网页

https://www.pexels.com/search/book/,能够设计如下代码,笔者只需输入搜索内容,便可返回网页链接。

content = input(请输入搜索内容:)

url_path = https://www.pexels.com/search/{}/.format(content)

print(url_path)

运行程序并输入book,便可返回网页链接,单击网页链接便可拜访网页了,如图1.4所示。

图1.4 字符串格式化符演示

03 函数与掌控语句

本节重点介绍Python()函数的定义与运用办法,介绍Python的判断和循环两种爬虫技术中常用的控制语句。

1. 函数

“脏活累活交给函数来做”,首要瞧瞧Python中定义函数的办法

def 函数名(参数1,参数2...): return 结果

制作一个输入直角边就能计算出直角三角形的面积函数:

def function(a,b): return 1/2*a*b #能够这般写 def function(a,b): print( 1/2*a*b) 重视:读者不必须太纠结二者的区别,用return是返回一个值,而第二个是调用函数执行打印功能。

经过输入function(2,3),便能够调用函数,计算直角边为2和3的直角三角形的面积。此刻来做一个综合练习:读者都晓得网上颁布tel号码,如156****9354,中间的数值用其他符号代替了,而用户输入手机号时却是完整地输入,下面就经过Python()函数来实现这种转换功能。

def change_number(number): hiding_number = number.replace(number[3:7],**4) print(hiding_number) change_number(15648929354) # result 156****9354 重视这儿的手机号码是随意输入的,不是真实的号码。

代码说明如下:

定义了一个名为change_number的函数。对输入的参数进行切片,把参数的[3:7]部分替换为‘*’号,并打印出来。调用函数。

2. 判断语句

在爬虫实战中会经常运用判断语句,Python的判断语句格式如下:

if condition:

do

else:

do

# 重视:冒号和缩进不要忘记了

# 再看一下多重要求的格式

if condition:

do

elif condition:

do

else:

do

在平时运用秘码时,输入的秘码正确就可登录,秘码错误时就必须再次输入秘码

def count_login(): password = input(password if password == 12345: print(输入成功!) else: print(错误,再输入) count_login() count_login()

程序说明如下:

运行程序,输入秘码后按Enter键。倘若输入的字符串为12345,则打印“输入成功!”,程序结束。倘若输入的字符串不是12345,则打印“错误,再输入”,继续运行程序,直到输入正确为止。

读者能够将程序设计得更为有趣,例如,“3次输入失败后,退出程序”等。

3. 循环语句

Python的循环语句包含for循环和while循环,代码如下:

#for循环for item in iterable: do #item暗示元素,iterable是集合 for i in range(1,11): print(i) #其结果为依次输出1到10,切记11是不输出的,range为Python内置函数 #while循环 while condition: do

例如,设计一个小程序,计算1~100的和:

i = 0sum = 0 while i < 100: i = i + 1 sum = sum + i print(sum) # result 5050

04 Python数据结构

数据结构是存放数据的容器,本节重点讲解Python的4种基本数据结构,即列表、字典、元组和集合。

1. 列表

在爬虫实战中,运用最多的便是列表数据结构,不论是构造出的多个URL,还是爬取到的数据,大都数都为列表数据结构。下面首要介绍列表最明显的特征:

列表中的每一个元素都是可变的。列表的元素都是有序的,便是每一个元素都有对应的位置(类似字符串的切片和索引)。列表能够容纳所有的对象。

列表中的每一个元素都是可变的,这寓意能够对列表进行增、删、改操作,这些操作在爬虫中很少运用因此呢这儿再也不给读者添加知识包袱

列表的每一个元素都有对应的位置,这种用法与字符串的切片和索引很类似

list = [peter, lilei, wangwu, xiaoming] print(list[0]) print(list[2:]) # result peter [wangwu, xiaoming]

倘若为切片,返回的是列表的数据结构。

列表能够容纳所有的对象:

list = [ 1, 1.1, string, print(1), True, [1, 2], (1, 2), {key, value} ]

列表中会经常用到多重循环,因此呢读者有必要去认识运用多重循环。此刻,摆在读者面前有两个列表,分别是姓名和年龄的列表:

names = [xiaoming,wangwu,peter] ages = [23,15,58]

此时能够经过多重循环让name和age同期打印在屏幕上:

names = [xiaoming,wangwu,peter]ages = [23,15,58] for name, age in zip(names, ages): print(name,age) # result xiaoming 23 wangwu 15 peter 58 重视:多重循环前后变量要一致。

在爬虫中,经常请求多个网页,一般状况下会把网页存到列表中,而后循环依次取出并拜访爬取数据。这些网页都有必定的规律,倘若是手动将这些网页URL存入到列表中,不仅花费太多时间,导致代码冗余。此时经过列表推导式,构造出这般的列表,例如某个网站每页的URL是这般的(一共13页):

http://bj.xiaozhu.com/search-duanzufang-p1-0/http://bj.xiaozhu.com/search-duanzufang-p2-0/http://bj.xiaozhu.com/search-duanzufang-p3-0/http://bj.xiaozhu.com/search-duanzufang-p4-0/……

经过以下代码就可构造出13页URL的列表数据:

urls = [http://bj.xiaozhu.com/search-duanzufang-p{}-0/.format(number) for number in range(1,14)] for url in urls: print(url)

经过一行代码就可构造出来,经过for循环打印出每一个URL,如图1.5所示。

图1.5 列表推导式构造URL列表

重视:本网站为小猪短租网。

2. 字典

Python的字典数据结构与现实中的字典类似,以键值对(key-value)的形式表现出来。本文中只讲解字典的创造,字典的操作在后面会仔细介绍。字典的格式如下:

user_info = { name:xiaoming, age:23, sex:man } 重视插进MongoDB数据库需用字典结构。

3. 元组和集合

在爬虫中,元组和集合很少用到,因此呢这儿只做简单介绍。元组类似于列表,然则元组的元素不可修改只能查看,元组的格式如下:

tuple = (1,2,3)

集合的概念类似数学中的集合。每一个集合中的元素是无序的,不能够有重复的对象,因此呢能够经过集合把重复的数据去除。

list = [xiaoming,zhangyun,xiaoming]set = set(list) print(set) # result {zhangyun, xiaoming} 重视:集合是用大括号构建的。

05 Python文件操作

在爬虫初期的工作中,常常会把数据存储到文件中。本节重点讲解Python怎样打开文件和读写数据。

1. 打开文件

Python中经过open()函数打开文件,语法如下:

open(name[, mode[, buffering]])

open()函数运用文件名做为独一的强制参数,而后返回一个文件对象。模式(mode)和缓冲(buffering)是可选参数。在Python的文件操作中,mode参数的输入是有必要的,而buffering运用较少。

倘若在本机上有名为file.txt的文件(读者能够在本机中新建一个文本文件),其存储路径为C:\Users\Administrator\Desktop,那样能够经过下面代码打开文件:

f = open(C:/Users/Administrator/Desktop/file.txt) 重视:此代码为Windows系统下的路径写法。

倘若文件不存在,则会显现如图1.6所示的错误。

图1.6 文件不存在报错信息

倘若open()函数只是加入文件的路径这一个参数,则只能打开文件并读取文件的关联内容。倘若要向文件中写入内容,则必要加入模式这个参数了。下面首要瞧瞧open()函数中模式参数的常用值,如表1.1所示。

表1.1 open()函数中模式参数的常用值

2. 读写文件

上一节中有了名为f的类文件对象,那样能够经过f.write()办法和f.read()办法写入和读取数据了。

f = open(C:/Users/Administrator/Desktop/file.txt,w+) f.write(hello world)

此时,在本机上打开file.txt文件,能够看到如图1.7所示的结果。

图1.7 Python写文件

重视倘若创立文件,运行上面代码能够成功。

倘若再次运行程序,txt文件中的内容不会继续添加,能够修改模式参数为r+,便可始终写入文件。

Python读取文件经过read()办法,下面尝试把f的类文件对象写入的数据读取出来,运用如下代码就可完成操作:

f = open(C:/Users/Administrator/Desktop/file.txt,r)

content = f.read()

print(content)

# result hello world

3. 关闭文件

当完成读写工作后,应该牢记运用close()办法关闭文件。这般能够保准Python进行缓冲的清理(出于效率思虑而把数据临时存储在内存中)和文件的安全性。经过下面代码就可关闭文件。

f = open(C:/Users/Administrator/Desktop/file.txt,r) content = f.read() print(content) f.close()

06 Python面向对象

Python做为一个面向对象的语言,很容易创建一个类和对象。本节重点讲解类的定义及其关联运用办法

1. 定义类

类是用来描述拥有相同属性和办法的对象集合。人能够经过区别的肤色划分为区别的种族,食品区别的种类,商品是形形色色。但划分为同一类的物体,肯定拥有类似的特征和行径方式。

针对同一款自动车而言,它们的构成结构都是同样的,如车架、车轮和脚踏板等。经过Python能够定义这个自行车的类:

class Bike: compose = [frame,wheel,pedal]

经过运用class定义一个自动车的类,类中的变量compose叫作为类的变量,专业术语为类的属性。这般,顾客购买的自动构成结构便是同样的了。

my_bike = Bike() you_bike = Bike() print(my_bike.compose) print(you_bike.compose) #类的属性都是同样

结果如图1.8所示。

图1.8 类属性引用

在左边写上变量名,右边写上类的名叫作,这个过程叫作之为类的实例化,而my_bike就是类的实例。经过“.”加上类的属性,便是类属性的引用。类的属性会被类的实例共享,因此结果都是同样的。

2. 实例属性

针对同一款自动来讲,有些顾客买回去后会改造下,如加一个车筐能够放东西等。

class Bike: compose = [frame,wheel,pedal] my_bike = Bike() my_bike.other = basket print(my_bike.other) #实例属性

结果如图1.9所示。

图1.9 实例属性

说明:经过给类的实例属性进行赋值,便是实例属性。compose属性属于所有的该款自动车,而other属性只属于my_bike这个类的实例。

3. 实例办法

读者是不是还记得字符串的format()办法办法便是函数,办法是对实例进行运用的,因此又叫实例办法针对自动车而言,它的办法便是骑行。

class Bike: compose = [frame,wheel,pedal] def use(self): print(you are riding) my_bike = Bike() my_bike.use()

结果如图1.10所示。

图1.10 实例办法

重视这儿的self参数便是实例本身。

和函数同样,实例办法能够有参数的。

class Bike: compose = [frame,wheel,pedal] def use(self,time): print(you ride {}m.format(time*100)) my_bike = Bike() my_bike.use(10)

结果如图1.11所示。

图1.11 实例办法多参数

Python的类中有有些“魔法办法”,_init_()办法便是其中之一。在咱们创造实例的时候,不必须引用该办法会被自动执行。

class Bike: compose = [frame,wheel,pedal] def __init__(self): self.other = basket def use(self,time): print(you ride {}m.format(time*100)) my_bike = Bike() print(my_bike.other)

结果如图1.12所示。

图1.12 魔术办法

4. 类的继承

共享单车的显现,方便了人们的出行。共享单车和原来的自动构成结构类似,但多了付费的功能。

class Bike: compose = [frame,wheel,pedal] def __init__(self): self.other = basket #定义实例的属性 def use(self,time): print(you ride {}m.format(time*100)) class Share_bike(Bike): def cost(self,hour): print(you spent {}.format(hour*2)) bike = Share_bike() print(bike.other) bike.cost(2)

结果如图1.13所示。

图1.13 类的继承

在新的类Share_bike后面的括号中加入Bike,暗示Share_bike继承了Bike父类。父类中的变量和办法能够完全被子类继承,在特殊状况下,能够对其覆盖。

关于作者:

罗攀,知名论坛Python爬虫专题管理员。善于Python爬虫技术,并对Python数据分析与挖掘科研。曾经在CSDN等多个知名博客网站发布多篇技术文案,深受读者的喜欢日前从事线上Python网络爬虫的培训工作。

蒋仟,喜欢善于Python编程,并将Python做为学术科研手段。在数据采集、数据分析等方面均有较为深入的科研。对Python网络爬虫技术应用颇有心得。日前从事林业遥感技术的科研,并利用业余时间兼职从事Python培训方面的工作。

本文摘编自《从零起始学Python网络爬虫》,经出版方授权发布。

编辑:王菁

校对:林

— 完 —

关注清华-青岛数据科学科研院官方微X公众平台“THU数据派”及姊妹号“数据派THU”获取更加多讲座福利及优秀内容。

回复

使用道具 举报

11

主题

801

回帖

7

积分

新手上路

Rank: 1

积分
7
发表于 2024-9-6 10:05:51 | 显示全部楼层
软文发布论坛开幕式圆满成功。 http://www.fok120.com
回复

使用道具 举报

3011

主题

2万

回帖

9915万

积分

论坛元老

Rank: 8Rank: 8

积分
99159151
发表于 2024-10-5 04:00:28 | 显示全部楼层
谷歌外链发布 http://www.fok120.com/
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-9 03:06 , Processed in 0.086268 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.