我是靠谱客的博主 迷你绿茶,这篇文章主要介绍python3 爬虫 零基础快速上手(爬虫示例),现在分享给大家,希望可以做个参考。

(补1:由于csdn页面重构了,看到有很多人浏览,特地更新一下获取内容补充的字都为绿字)

Python是一种面向对象的解释型计算机程序设计语言,类似c,java ,php,JavaScript一种语言,比如,完成同一个任务,C语言要写1000行代码,Java只需要写100行,而Python可能只要20行。Python是一种高级的语言。

一:python 安装:首先,根据你的Windows版本(64位还是32位)从Python的官方网站下载Python 3.6对应的64位安装程序32位安装程序

 

特别要注意勾上Add Python 3.6 to PATH,然后点“customize installation"

点击Next

(补1:当在安装过程中出现报错,0x80072f7d,在安装时最后两项 和debugging相关的不要打勾,好像是和VS2015有关)

Install

运行Python

安装成功后,打开命令提示符窗口,敲入python后,会出现两种情况:

 

 

 

 

看到上面的画面,就说明Python安装成功!

你看到提示符>>>就表示我们已经在Python交互式环境中了,可以输入任何Python代码,回车后会立刻得到执行结果。现在,输入exit()并回车,就可以退出Python交互式环境(直接关掉命令行窗口也可以)

注意:命令行退出可能习惯用ctrl +C,这时用

会报错,,,退出用exit()就可以了。

但还可以得到一个错误:

复制代码
1
‘python’ 不是内部或外部命令,也不是可运行的程序或批处理文件。

 

这是因为Windows会根据一个Path的环境变量设定的路径去查找python.exe,如果没找到,就会报错。如果在安装时漏掉了勾选Add Python 3.6 to PATH,那就要手动把python.exe所在的路径添加到Path中。

添加路径:在菜单中打开系统菜单 点选 计算机->属性->系统

 

添加完成在cmd再次输入python,就可以了。

二:python 安装 第三方库

确保安装时勾选了pipAdd python.exe to Path

现在下载几个需要常用的第三方库

启动cmd 输入pip

 

表示pip 可以使用

 

安装Pillow:PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。

复制代码
1
$ pip install pillow

 

 

 

安装requests:内置的urllib模块,用于访问网络资源。但是,它用起来比较麻烦,而且,缺少很多实用的高级功能.更好的方案是使用requests。它是一个Python第三方库,处理URL资源特别方便

复制代码
1
$ pip install requests

 

 

 

 

安装beautifulsoup4:Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据

复制代码
1
$ pip install beautifulsoup4

 

安装lxml:xml是Python中与XML及HTML相关功能中最丰富和最容易使用的库。lxml并不是Python自带的包,而是为libxml2和libxslt库的一个Python化的绑定。

 

复制代码
1
$ pip install lxml

安装matplotlib:Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形

 

复制代码
1
$ pip install matplotlib

 

 

接下来进入正题:

以上准备都是给这边做基础

http://blog.csdn.net/s740556472/article/details/78239204

从git上下载下来,

https://github.com/unlimitbladeworks/spider_csdn.git

 

下载下来

 

找到路径启动python解释器

 

在python解释器中

ctrl +O 打开目录,找到下载的文件,选中csdn.py 打开

 

 

 

在这我厚颜无耻的把代码抄了过来,为了表示对原作者的尊敬,原参数链接我就不进行修改了,

 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#coding = utf-8 import requests from bs4 import BeautifulSoup as bs import re import time # 访问我的博客 def spider(url, headers): r = requests.get(url=url, headers=headers) html = r.text # 解析html代码 soup = bs(html, 'lxml') ul = soup.find(name='ul', attrs={'id': 'blog_rank'}) # 获取ul下的第一个li节点,正则表达式需要字符串,所以转化一下 li = str(ul.find_next('li')) numbers = re.findall(r'span>(.+?)次</', li) # print(numbers) # 获取当前年月日 date = time.strftime("%Y-%m-%d", time.localtime()) # 拼接日期 numbers.append(date) text_save(numbers, 'visitorNumber.txt') print('成功执行!') # 文件存储 def text_save(content, filename, mode='a'): # Try to save a list variable in txt file. file = open(filename, mode) for i in range(len(content)): # 如果索引为最后一位,去掉空格且拼上换行符,否则剩下的后面拼接逗号 if i == len(content) - 1: number = (content[i]) + 'n' else: number = str(content[i]) + ',' file.write(number) file.close() if __name__ == '__main__': url = "http://blog.csdn.net/s740556472/article" headers = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate, sdch', 'Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6', 'Cache-Control': 'max-age=0', 'Connection': 'keep-alive', 'Host': 'blog.csdn.net', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36' } spider(url, headers)

(补:由于CSDN页面改版,之前的方法解析不到,特此此补充最新的)

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#coding = utf-8 import requests from bs4 import BeautifulSoup as bs import re import time import json # 访问我的博客 def spider(url, headers): r = requests.get(url=url, headers=headers) html = r.text # 解析html代码 soup = bs(html, 'lxml') #print(soup); #ul = soup.find(name='ul', attrs={'class': 'mod_my_t clearfix'}) ul = soup.find('div', attrs={'class':'grade-box'}) #uli=ul.find_next_siblings('li') print(ul); #查看bs4的文档 find 方法 查找元素,find_next_siblings获取兄弟元素 text=ul.find("dt", text="访问:").find_next_siblings(); print(text); t=text[0]; print(t) #将Tag元素转为字符串 t3=str(t); #上面的find是bs4的方法,这里的是字符串的find t0=t3.find("title=",0,len(t3)) t1=t3.find(">", 0, len(t3)) print(t0); print(t1); #截取数字 numbers=t3[t0+7:t1-1]; print(numbers); #将字符串类型转列表 numbers=numbers.split(" ") #text1=soup.find_all("dt", text="访问:") #print(text1); # 获取当前年月日 date = time.strftime("%Y-%m-%d", time.localtime()) # 拼接日期 numbers.append(date) text_save(numbers, 'raningDate.txt') print('成功执行!') # 文件存储 def text_save(content, filename, mode='a'): # Try to save a list variable in txt file. file = open(filename, mode) for i in range(len(content)): # 如果索引为最后一位,去掉空格且拼上换行符,否则剩下的后面拼接逗号 if i == len(content) - 1: number = (content[i]) + 'n' else: number = str(content[i]) + ',' file.write(number) file.close() if __name__ == '__main__': url = "https://blog.csdn.net/ruiti/article/details/82715601" headers = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate, sdch', 'Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6', 'Cache-Control': 'max-age=0', 'Connection': 'keep-alive', 'Host': 'blog.csdn.net', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36' } spider(url, headers)

(补1:其中很多的当时测试的注释打印没有删除,希望可以帮助你的理解)

F5键 启动程序就执行了!(补1:结果应该是不变的)

 

此代码执行完成!

 

接下来就是去代码里看如何实现程序的了!

原文使用windows每天定时执行脚本生成一个类似日志的文件

 

感兴趣的小伙伴可以自己去原本看,链接在上面,我们现在用python写一个小脚板,让他一次性生成一个这样的txt内容

在解释器页面ctrl+N新建一个文件,上代码

 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# -*- coding: utf-8 -*- import datetime # 提供操作日期和时间的类 import random # 提供随机数类 print ("开始注入数据") try: fobj=open("drnData.txt",'a') # 这里的a意思是追加,这样在加了之后就不会覆盖掉源文件中的内容,如果是w则会覆盖。 except IOError: print ('*** file open error create') else: for index in range(20): #for 循环生成20条数据 randNum=random.randint(0,10) #随机一个0-10的数 randNUm=randNum+index*10 #为了让随机的数是越来越大 cur_date = datetime.datetime(2017, 10, 19) + datetime.timedelta(index) #获取日期函数 其实日期datetime.datetime(2017, 10, 19):2015-10-19+ 00:00:00 +datetime.timedelta(index):推迟的天数 time_format = cur_date.strftime('%Y%m%d') #将时间日期转换成我们需要的格式 txtString =str(randNUm) +","+str(time_format)#拼接字符串 将数据和日期拼接起来 fobj.write(txtString+'n') #这里的n的意思是在源文件末尾换行,即新加内容另起一行插入。写入文件 fobj.close() # 特别注意文件操作完毕后要close print ("注入数据结束")

 

 

这个就是自己写的了,感觉不那么心虚了!

保存到一个目录下,然后F5运行代码,drnData.txt生成在同目录下

 

生成如下数据

 

 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1,20171019 18,20171020 20,20171021 35,20171022 49,20171023 58,20171024 70,20171025 72,20171026 84,20171027 93,20171028 108,20171029 120,20171030 122,20171031 135,20171101 148,20171102 155,20171103 165,20171104 177,20171105 183,20171106 193,20171107


现在数据生成,那么我们开始将数据转换成表格

 

现将之前下载的drawBydata.py放到数据生成的同目录下

用解释器打开drawBydata.py,修改文件中打开文件的名称代码如下

 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#coding=utf-8 import matplotlib.pyplot as plt import matplotlib.dates as mdates import datetime import decimal #根据数据动态画图 def drawBydata(): #读取输出的txt文档 (recordDate,y) = readData('drnData.txt') #获取记录的日期列表范围(0,) x = range(len(recordDate)) # plt.figure() 开始画图,r:红色 #http://www.360doc.com/content/15/0113/23/16740871_440559122.shtml plt.plot(x,y,'ro-') #rotation,x轴字体旋转的角度 plt.xticks(x, recordDate,rotation=70) plt.margins(0.08) plt.subplots_adjust(bottom=0.15) #设置x轴的名字 plt.xlabel("Date") plt.ylabel("Visitors") #图的标题 plt.title("My blog visit analysis") plt.show() print('执行成功!') #读取数据 def readData(fileName): #以只读文件打开 inFile = open(fileName,'r') #定义第一列数据为博客访问量 visitors = [] #第二列数据为日期 recordDate = [] #遍历文件每一行 for line in inFile: #逗号分隔 trainingSet = line.split(',') #将第一列和第二列数据拼入对应的列表中 visitors.append(trainingSet[0]) recordDate.append(trainingSet[1]) inFile.close() return (recordDate,visitors) if __name__ == '__main__': drawBydata()


点击F5运行 生成如下图像

 

 

 

 

这是什么鬼??查了很多原因有查了下matplotlib的参数用法最后发现了bug.......

 

 

复制代码
1
2
visitors = list(map(int, visitors)) plt.plot(x,visitors,'ro-')

 

 

 

 

 

原因是输入的值是字符串,将字符串装为数字就可以了,得到最终图形

 

 

完成,,有问题的小伙伴可以给我留言,,一起探讨下再见 

(补2:有兴趣的可以看下抓取淘宝数据:

https://blog.csdn.net/ruiti/article/details/82846768

 

 

 

 

最后

以上就是迷你绿茶最近收集整理的关于python3 爬虫 零基础快速上手(爬虫示例)的全部内容,更多相关python3内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部