Linxing

导航

python学习第六篇 文件操作 爬虫

文件操作

   1、文件File定义

       文件是用于数据存储的单位文件通常用来长期存储数据

       文件中的数据是以字节为单位进行顺序存储的

   2、文件的操作流程

       1、打开文件

       2、读/写文件

       3、关闭文件

   注:

       任何的操作系统。一个应用程序同时打开文件的数量有最大数限制

   3、文本文件的操作

       1、文件的打开与关闭

       open(file, mode=’rt')用于打开一个文件,返回此文件流对象,如果打开文件失败,则会触发OSError错误

       2、文件的关闭方法

           f. close()#关闭文件,释放系统资源

   4、文件的读操作

       1、F. read(size=-1)

           说明:

           从文件流中最多读取size个字符(文本文件)或字节(二进制文件) ,如果不给出参数,则默认读取文件中全部的内容返回。

       2、F. readline()

           说明:

           读取一行数据,如果到达文件末尾则近回空行

       3、F. readlines (max_ chars = -1)

           说明:

           返回每行字符串的列表,max_ chars为最大字符(或字节数)

练习:

   自己写一个文件‘info. txt’内部存一些文件信息

   如:

   张三 20 100

   李四 21 99

   小王 22 98

   写程序这些数据读出来,打印终端上

   4、文件的写操作

       1、F. write(text)

           说明:

           写一个字符串到文件流中,返回写入的字符数(文本文件)或字节数(二进制文件)

       2、F.writelines(lines)说明:

           将字符串的列表或字符串的列表中的内容写人文件

 

 1 # f = open('./info.txt','w',encoding='utf-8')
 2 # f.write("张三 20 100\n")
 3 # f.write("张三 25 100\n")
 4 # f.write("张三 22 100\n")
 5 # f.close()
 6 try:
 7     i = 0
 8     f = open('./info.txt','w', encoding='utf-8')
 9     while i < 2:
10         k = input("写入数据\n")
11         f.write(k)
12         k="\n"
13         f.write(k)
14         i += 1
15     print('写入完成')
16     f.close()
17     f = open('./info.txt',encoding='utf-8')
18     s = f.readlines()
19     # print(s)
20     for line in s:
21         k = line.strip()
22         # print(k)
23         b,n,m= k.split()
24         # print(b,n,m)
25         # n = int(n)
26         # m = int(m)
27         print('姓名:', b, '年龄:', n, '成绩:', m)
28         # print(line)
29     f.close()
30 except OSError:
31     print('打开文件失败')

网络爬虫

   1.网络爬虫(网络蜘蛛、网络机器人)

       1、定义:抓取网络数据的程序

       2、用python程序模仿人点击浏览器访问网站

       3、目的:获取大量数据进行分析

   2.企业获取数据的方式

       1、公司自有的数据

       2、第三方数据平台购买

       3、爬虫爬取数据:市场上没有,或者价格太高

   3.python做爬虫的优势

       请求模块、解析模块丰富成熟,强大的Scrapy爬虫框架

       请求网站后返回的是网站的全部代码,而解析模块可以对网页进行分析获取到我们想要的数据

       php:对多线程、异步支持不太好

       JAVA:代买笨重,代码量大

       C/C++:虽然效率高,但是代码成型慢

   4.爬虫分类

       1.通用网络爬虫(搜索引擎引用,需要遵守robots协议)

       比如:百度、谷歌等网站

       robots协议:网站通过Robots协议告诉搜索引擎哪些页面可抓,哪些页面不可抓

       说明:

           每一个网站都是有robots协议, 有百度快照字样就是百度爬取的网站

       2.搜索引擎如何获取一个新网站的URL?

           1、网站主动向搜索引擎提供(百度站长平台)

           2、DNS服务器(万网),快速收录新网站

       3.聚焦网络爬虫

           自己写的爬虫程序:面向主题爬虫、面向需求的爬虫

   5.爬取数据步骤

       1.确定需要爬取的URL地址

       2.通过HTTP /HTTPS协议来获取相应的HTM页面

       3.解析响应

           1.所需数据,保存

           2.页面中新的URL,继续第2步

   6.WEB

       1.URL:

           scheme://host[:port]/path/... ... /[?query-string][#anchor]

           协议      域名  端口  资源路径    查询参数         锚点

           https://item.jd.com: 80/12451724.html

 

           https://www.baidu.com/s?ie=utf-8&f=8

           #多个查询参数之间要用&做分隔

           锚点:  跳转到网页指定位置

       2.请求头(Requst Headers):

           #接收数据类型:

           Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3

           #是否支持压缩/解压缩

           Accept-Encoding: gzip, deflate, br

           #支持的语言

           Accept-Language: zh-CN,zh;q=0.9

           #缓冲控制

           #max-age>0:直接从浏览器缓存中提取

           #max-age<=0:向服务器发请求确认,该资源是否修改

           Cache-Control: max-age=0

           #服务器可能检查

           Connection: keep-alive

           #支持长连接

           Cookie: BAIDUID=E1AFFE8C6467DCF0FC30CBA7BDD37F75:FG=1; BIDUPSID=E1AFFE8C6467DCF0FC30CBA7BDD37F75;... ....

           #升级HTTPS

           Host: www.baidu.com

           Upgrade-Insecure-Requests: 1

           #浏览器信息

           User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36

       3.GET和POST

           1、GET, 查询参数在URL上面显示出来

           2、POST:Form表单提交,传输大文件,数据隐藏在Form表单中,不会在IRL地址上显示

       4.爬虫请求模块(urllib. request)

           常用方法

           1.urllib.request.urlopen(‘URL地址’)

            1.作用:向网站发送请求并获取相应对象

              2.重构 User-Agent

                   1.不支持重构:User-Agent :urlopen()

                   2.支持重构 User-Agent:urllib。request.Request()

           2.urllib.request.urlopen('URL',headers={})

           使用流程

               1.创建请求对象

               2.发请求获取响应

               3.获取响应内容

           3.响应对象read()

               1.read()

               2.getcode():返回http响应码

                  200:成功

                  302:临时转义到新的URL

                  404:页面找不到

                  500:服务器异常

               3.geturl()

                1.返回实际数据的URL

       6.编码模块(urllib.parse)(编码解析网站:http://tool.chinaz.com/Tools/URLEncode.aspx?qq-pf-to=pcqq.temporaryc2c)

           1.urllib.parse.urlencode()

 

           写程序

               请输入你要搜索的内容 ... ...

               保存到本地文件:... ... html

       7.案例 百度贴吧数据爬取

           1.要求

               1.输入抓取的贴吧名称

               2.起始页

               3.终止页

               4.保存到本地;第1页.html 第2页.html ... ...

           2.步骤

               1.找URL规律,拼接URL

                   第1页:http://

               2.获取页面内容(发请求获取响应)

               3.保存(本地、数据库)

更新一个爬虫小程序。。爬取搜索结果的页面

 1 import urllib.request
 2 import urllib.parse
 3 
 4 baseurl='http://www.baidu.com/s?'
 5 key=input('请输入你要搜索的内容')
 6 #进行urlencode()编码转换
 7 wd={'wd':key}
 8 key=urllib.parse.urlencode(wd)
 9 url=baseurl+key
10 # print(url)
11 headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
12 #创建请求对象
13 req=urllib.request.Request(url,headers=headers)
14 # print(req)
15 #获取响应对象
16 res=urllib.request.urlopen(req)
17 
18 html=res.read().decode('utf-8')
19 #写入本地文件
20 with open('搜索.html','w',encoding='utf-8') as f:
21     f.write(html)
22     print("爬取成功")

posted on 2019-07-21 00:08  Linxing  阅读(651)  评论(0编辑  收藏  举报