南京大学用Python玩转数据慕课学习整理
3.1
1、文件用完后养成主动关闭文件的习惯
2、Python中二进制文件可以不使用缓冲,但是文本文件必须使用缓冲
3、with open(‘firstpro.txt’,‘w’) as f:
f.write(‘Hello, World!’)
既写文件,又读文件,用’r+’
4、open语句读完文件自动关闭,所以不用再额外写上close语句了
5、readlines读取多行数据,返回一个列表。
Python在读取文件时并不删除换行符
6、读写时都有文件指针。
seek函数可以移动文件指针:
file_obj.seek(offset,whence=0)
在文件中移动指针,从whence(0表示文件头部,1表示当前位置,2表示文件尾部)偏移offset个字节 。whence参数可选,默认值为0
3.2
1、
抓取:requests第三方库
基本方法:get
r = requests.get(‘https://api/github.com/user’) (把要请求页面的url放进去)
r.status_code(查看状态码,若状态码是200表示一切正常)
抓取一个网页前查看其有没有爬虫协议,看有没有被禁止:robots.txt
如豆瓣的:https://www.douban.com/robots.txt
re.text属性:自动推测文本形式并进行解码
有些网站会对http请求的Headers的User-Agent进行检测,需将headers信息传递给get函数的headers参数,例如豆瓣最近也有了此要求,例如知乎,直接访问会返回400,加上headers参数后可正确返回:
re = requests.get(‘https://www.zhihu.com’)
re.status_code
400headers = {“User-Agent”: “Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.83 Safari/535.11”}
re = requests.get(‘https://www.zhihu.com’, headers = headers)
re.status_code
200
反爬的策略还有很多,需要逐渐熟悉
2、解析:
BeautifulSoup库:
可以从HTML或XML文件中提取数据的Python库
评论的等级:
比较复杂的模式适合用正则表达式模块进行处理
先导入:from bs4 import BeautifulSoup
对HTML最常用的解析器是LXML,此解析器速度较快、容错能力较强
用BeautifulSoup函数传入这个字符串:
markup = ‘
The Little Prince
’soup = BeautifulSoup(markup,‘lxml’)
BeautifulSoup对象有四种:
Tag、NavigableString、BeautifulSoup和Comment
Tag就是HTML或XML文档中的标签,如上个字符串中的、,对文字内容做一些修饰
NavigableString是tag当中的字符串,如The Little Prince
comment是NavigableString的一个子类
用标签可以得到它的内容:
soup.b
Out[9]: The Little Prince
find_all方法:
寻找所有标签内容
豆瓣网页整理:
获得一个BeautifulSoup对象soup:
soup = BeautifulSoup(r.text,‘lxml’)
通过find_all方法寻找评论所在的行:
pattern = soup.find_all(‘span’,‘short’)
评论行:
狐狸告诉小王子的秘密是:用心去看才看得清楚;是分离让小王子更思念他的玫瑰;爱就是责任。
标签span,属性short
find_all方法返回一个列表,遍历列表,返回每项的短评
for item in pattern:
print(item.string)
获取评分:找字符串中间的一个字符串:用.*来表示
3、爬虫读取豆瓣:
headers = {“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36”}
r = requests.get(‘https://book.douban.com/subject/1084336/comments/’,headers=headers)
r.status_code
Out[102]: 200