Day One

1.编码和解码

Ⅰ.编码(encode)

 >>> '你好'.encode(encoding='utf-8')b'\xe4\xbd\xa0\xe5\xa5\xbd'

Ⅱ.解码(decode)

 >>> b'\xe4\xbd\xa0\xe5\xa5\xbd'.decode(encoding='utf-8')你好

2.读写本地纯文本文件

  • 创建文本文档
  • 文件打开方法def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)(可通过PyCharm查询:按住Ctrl不放,将鼠标放在方法上可以显示详细内容)

文本打开格式:
‘r’ open for reading (default)
‘w’ open for writing, truncating the file first
‘x’ create a new file and open it for writing
‘a’ open for writing, appending to the end of the file if it exists
‘b’ binary mode
‘t’ text mode (default)
‘+’ open a disk file for updating (reading and writing)
‘U’ universal newline mode (deprecated)

Ⅰ.读方法

  • read():读取整个文件,返回字符串型数据
  • readline():读取文件中的一行,返回字符串型数据
  • readlines():读取整个文件,返回列表型数据
  • readable():判断文件是否可读,返回布尔值

Ⅱ.写方法

  • write():将字符串型信息写入文件
  • writelines():将列表型信息写入文件
  • writeable() :判断文件是否可写,返回布尔值

3.非纯文本文件的读写

Ⅰ.二进制编码

  • 图片也是以二进制形式存储每一个像素,以JPG方式进行编码,所以可以使用二进制读写来实现图片的读写
 open('./tupian.jpg',mode='wb')open('./tupian.jpg',mode='rb')

Ⅱ.Base64编码

  • Base64编码是ASCII码的子集
  • base64编码最终结果是以字符串的形式表示二进制
  • base64编码解码的过程是对二进制码进行加密,加密前后都是二进制形式
  • 图片也可以按照base64进行编码,然后写入文件

①编码

>>> a = 'hello'
>>> mi = base64.b64encode(a.encode(encoding='utf-8'))
>>> ma = mi.decode(encoding='ascii')
>>> print(ma)
aGVsbG8=

②解码

>>> base64code = 'aGVsbG8='
>>> jie = base64.b64decode(base64code.encode(encoding='ascii'))
>>> da = jie.decode(encoding='utf-8')
>>> print(da)
hello

ps.相对路径
同级路径:’./’
父级路径:’…/’
Ctrl+ ’ / ':对选中内容快速注释
编码方式:
ASCII 1字节
GBK(GB2312)2字节
UTF-8 3字节
Unicode(万国码) 4字节
Tab键可以增加一个缩进(四个空格)
Shift+Tab可以减少一个缩进
Alt+Shift+鼠标左键拖动可以进入列编辑模式
Code > Reformat Code 可以将代码以相应语言风格格式化
导包时,习惯性把内置库写在最上面,三方库第二,from导入语句在最后

Day Two

1.HTTP协议

2.Google Chrom

Ⅰ.Ctrl+Shift+I打开检查
Ⅱ.在右侧Elements中可以查看整个页面的源代码
Ⅲ.Network中可以记录网页所有请求与响应的详细信息

3.pip包的管理

  • 包/库:已经写好的代码,可以直接引用,含有_ _init_ _.py文件
  • 内置库,在python解释器位置的**/lib** 目录下
  • 三方库:PyPI.org上有各种各样功能的开源库
  • pip安装的第三方库位置: 解释器目录\lib\site-packages

Ⅰ.pip包管理工具

pip常用方法 :
pip -v :查看pip版本号
pip search requests :搜索requests包信息
pip install requests :安装第三方库
pip uninstall requests :删除已安装的的第三方库
pip list :展示已安装过的所有库
pip freeze > ok.txt :将库中内容导入ok.txt

Ⅱ.pip换源

  • 因为外网的限制导致某些库下载速度很慢,所以需要切换到国内的源

国内常用源:
豆瓣
https://pypi.doubanio.com/simple/
阿里云
https://mirrors.aliyun.com/pypi/simple/
清华大学
https://pypi.tuna.tsinghua.edu.cn/simple/
https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/

①.临时换源

 pip install requests - i https://pypi.douban.com/simple/

②.永久换源
通过配置pip文件中的pip.conf文件,写入配置

pip install pip -U  #将pip升级为最新版本
pip config set global.index-url https://pypi.douban.com/simple/

③.通过PyCharm换源

  • 步骤:File>Settings>Project>Python Interpreter>点击右边加号>Manage Repositories>右边加号添加新源

  • 新源添加完成后,只需切换源即可

4.调试运行模式

Ⅰ.打断点
Ⅱ.以Debug模式运行
Ⅲ.向下单步执行,观察变量值

5.BeautifulSoup库

Ⅰ.bs库只适合Python2时代,适合Python3时代的是bs4库
Ⅱ.BeautifulSoup4库的的名字是bs4,包的名字和包元信息名不一样,素以在导入时要注意库名

from bs4 import BeautifulSoup

6.XPath表达式

Ⅰ.XPath语句符号与含义

  • ’ / '表示下一层级 /la/b/of/k
  • ’ // '表示忽略任意父级目录
  • ’ @herf '表示取herf标签的属性
  • ‘ text() ’表示取标签中间的内容
  • ‘ [ ] ’表示过滤[ ]中的属性

7.etree

  • etree方法可以把HTML文件转换为etree类型的文件,可以使用XPath语句查询
from lxml import etree
html= ' html文件 '
dom = etree.HTML(html) #将html文件转换为etree类型
xpath_pattern = 'xpath表达式'
anser = dom.xpath(xpath_pattern)
#将etree类型的dom按xpth_pattern查找,结果以列表的形式存入anser

Day Three

1.爬虫尝试

爬取煎蛋网标题信息脚本:import requests
from lxml import etreeurl = 'http://jandan.net'headers = {# 'coocckies':,# 'refer':'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'
}resp = requests.get(url,headers=headers)
if resp.status_code  == 200:html = resp.textdom = etree.HTML(html)xpath_pattern = '//div[@class="post f list-post"]//h2/a/text()'titles = dom.xpath(xpath_pattern)
for i in titles:print(i)
  • 请求头在network里的headers里面存放
  • headers头文件可以用于识别是否爬虫脚本,较少网站会使用,可以自行加入跳过检测
  • Ctrl+F可以在Elements里面以XPath,String,selector查找信息
  • 部分网页使用动态请求,页面加载不是一次而成的,会使xpath语句产生问题,可以在Elements中找到,但无法爬取信息,可以通过network查看重新请求页面的代码,在network中看到的是最后一次的请求信息,然后使用xpath语句定位查询
  • 页面跳转可以通过获取子页面连接,使用requests.get()方法进行跳转获取新页面的HTML文件,然后按照原方法对子页面进行信息爬取
对网易新闻的头条新闻进行跳转爬取脚本:import requests
from lxml import etreeurl = 'https://news.163.com/'resp = requests.get(url)
if resp.status_code == 200:html = resp.textdom = etree.HTML(html)xpath_pattern = '//div[@class="news_default_news"]//a/@href'url_list = dom.xpath(xpath_pattern)for href in url_list:resp1 = requests.get(href)html1 = resp1.textdom1 = etree.HTML(html1)news = dom1.xpath('//div[@class="post_body"]//p/text()')for i in news:print(i)print("\n\n\n\n")

2.OS库

  • Operate System :系统管理库,可以对文件夹的增删改查,是python内置库
import os#打印当前工作目录下的文件和文件夹信息
print(os.listdir())#查看当前工作目录
print(os.getcwd())#改变工作目录
print(os.chdir('../Day 2'))
print(os.listdir())#判断是否存在文件或文件夹
print(os.path.exists('./aaa'))#创建文件夹
os.mkdir('./aaa')
print(os.path.exists('./aaa'))#获取当前脚本所在的文件夹,__file__特殊变量代表脚本自己
print(os.path.dirname(__file__))#拼写文件完整路径
file_path= os.path.join(os.path.dirname(__file__),'aaa','test.jpg')
print(file_path)

3.图片爬虫

  • 图片以二进制的形式存放在content参数中,使用requests.content()方法获取
  • 还需要创建文件夹,并且创建jpg文件,使用wb格式打开文件存入图片
import os
import requests
from lxml import etreeheaders = {# 'coocckies':,# 'refer':'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ''AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/87.0.4280.141 Safari/537.36'
}album_url = 'https://www.ivsky.com/tupian/lugui_v62472'resp = requests.get(album_url)
status_code = resp.status_codeif status_code == 200:html = resp.textalbum_dom = etree.HTML(html)img_pattern = '//div[@class="il_img"]/a/img/@src'title_pattern = '//h1/text()'image_src_list = album_dom.xpath(img_pattern)album_title = album_dom.xpath(title_pattern)[0]# 爬取回来的title名可能有空格,但windows资源管理器路径不支持空格存在,# 所以用strip()方法消除末尾空格album_title = album_title.strip()# print(image_src_list)# print(album_title)if not os.path.exists('./'+album_title):os.mkdir('./'+album_title)for i, image_src in enumerate(image_src_list):image_src = 'https:' + image_srcnice = requests.get(image_src, headers=headers)image_content_bytes = nice.contentimage_path = os.path.join(os.path.dirname(__file__), album_title, f'test{1+i}.jpg')with open(image_path, mode='wb') as f:f.write(image_content_bytes)print(f'第{i+1}张图片保存完毕')

4.格式化

>>> name = '小明'
>>> age = 13
  • 方法一:format方法
>>> print('我叫{},今年{}岁'.format(name.age))
我叫小明,今年13岁
  • 方法二:f特殊标志(python3.5以后出现)
>>>print(f'我叫{name},今年{age}岁')
我叫小明,今年13岁

Day Four

1.京东商品评价爬虫

  • JS动态网站:第一次请求从后台收到HTML源代码,只包含网页菜单导航等公共部分和JS,浏览器获取第一次响应后,解析JS,JS发起后续异步后台请求(xhr),通过JS把数据渲染到某一处div里面,使用会看到完整页面
  • network的JS类型请求界面中,如果代码是一行可以用左下角的{ }符号pretty print将代码格式化
  • 本次的请求头可以加上Referer参数,否则有可能会拒绝访问
  • 京东的评论页返回的jsonp格式文件,设计跨域问题,需要将jsonp先转换成json文件

解决方法:
① 删除不必要的的字符串
②从网上找jsonp转换器
③使用正则表达式

  • 按照需求对方法进行封装
import requests
import jsonbase_url = 'https://club.jd.com/comment/productPageComments.action'# Alt+Shift+鼠标左键拖动进入列编辑模式
params = {# 'callback': 'fetchJSON_comment98',      # 本例中可以通过删除callback参数获取json文件'productId': 100009077475,    # 商品id'score': 0,'sortType': 5,'page': 1,                    # 评论页码'pageSize': 10,'isShadowSku': 0,'rid': 0,'fold': 1
}# 本次的请求头可以加上Referer参数,表示请求从何处来
headers = {# 'coocckies':,'Referer': 'https://item.jd.com/','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ''AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/87.0.4280.141 Safari/537.36'
}resp = requests.get(base_url, headers=headers, params=params)
if resp.status_code == 200:comment_json = resp.text# print(comment_json)# 京东评论页返回的jsonp格式文件,设计跨域问题,需要将jsonp先转换成json文件comment_json_obj = json.loads(comment_json)# print(comment_json_obj)comments = comment_json_obj['comments']for comment in comments:cid = comment['id']content = comment['content']creation_time = comment['creationTime']product_color = comment['productColor']product_size = comment['productSize']print('—'*100)print(cid, content, creation_time)

2.静态网页与动态网页

Ⅰ.静态网站

  • 一次成型,直接可以访问所有的界面信息

Ⅱ.动态网站

  • 分步成型,多用于大型网站,没必要一次加载所有信息的网站,部分信息会随着用户的浏览进行加载,未访问到的部分不加载
  • 常用JS等语法进行二次请求,一般这种网页爬取相对麻烦

动态网站爬取步骤:
①打开network查看实时请求信息
②清空network,翻动网页,看看哪些是JS或XHR的二次请求,按Ctrl+F搜索关键字,找到请求文件
③查看二次请求的:
(1)General > Requesr URl请求地址
(2)Resquest Headers > cookie文件,referer文件和user-agent文件作为头文件
(3)Query String Parameters内的参数作为params参数
④使用伪造的请求头和参数对网站进行爬取操作

3.JSON

  • JSON可以解决不同语言之间的冲突,实现数据结构的统一

Ⅰ.JSON语法格式

{ } 内写键值对属性和值
[ ] 表示数组
“ ” 字符串用双引号括起来
常用类型变量或常量

xiaoming_json_str = """{"name" : "小明","age" : 13,"parent" : [{"name": "小明爸爸"},{"name": "小明妈妈"}]}
"""

Ⅱ.JSON库

import json  # python内置库

json.load()
#load方法可以使.json文件转换为python内置对象类型,如字典,列表
json.loads()
#loads方法可以把json格式变量转换为内置对象类型

json.dump()
#将python内置对象类型文件打包为json格式
json.dumps()
#将python内置对象类型变量打包为json格式

Day Five

1.SQlite3库的使用

步骤:
①导入sqlite3包
②使用connect方法建立连接
③使用cursor方法创建游标
④使用execute方法写入SQL语句
⑤使用插入,更新操作时,需要使用commit方法确认提交
⑥结束后关闭游标,断开连接

import sqlite3# 建立连接
connect = sqlite3.connect('./testsqlite.db')
# 创建游标
cursor = connect.cursor()# 创建表
cursor.execute("""CREATE TABLE IF NOT EXISTS student (id INTEGER PRIMARY KEY,name TEXT,age INTEGER);"""
)# 插入数据
cursor.execute("""insert into student (name, age) values ('小明',13);"""
)
# 插入,更新语句需要提交确认
connect.commit()# 查询语句
cursor.execute("""SELECT * FROM student;"""
)
result_set = cursor.fetchall()
print(result_set)# 关闭游标
cursor.close()
# 断开连接
connect.close()

2.数据库图形化工具

  • Navicat
  • mysql phpadminmysql-workbench
  • oracle plsql
  • DataGrip

3.jieba库

  • jieba库是一个三方库,需要下载
  • 生成器(Generator):生成序列、生成列表的制造者。生成器只能被迭代一次,可以通过自带的 _ _ next _ _( ) 方法把大量的数据逐个迭代产生一个迭代器。
  • 列表生成式:
    a = [i for i in Generator]
    # 将Generator生成器遍历后的数据生成列表i然后赋值给a
import jiebastrqs = '我在人民广场吃炸鸡'
words = jieba.cut(strqs, cut_all=False)  # 参数:False表示精确模式
print(type(words))     # words是一个生成器类型变量
print('/'.join(words))    #使用join方法产生一个迭代器

详情链接:https://github.com/fxsjy/jieba

4.停止词

  • 如果想要分析高频词汇,往往逗号,的,地等词汇出现次数最多,影响最终分析结果,所以需要把无用的词汇剔除,也有别人整理好了常见的无用词汇
  • 创建一个新列表,使用for循环让word遍历待清洗列表,如果待清洗列表中的的词汇不在停止词内,则将此词汇添加进新列表
comment_word_list = [',', ',', '同学', '看', '了', '一直', '夸', '太漂亮', '了']
with open('./dict/stop_words_zh.txt', mode='r', encoding='utf-8') as f:stop_words = f.read().split('\n')new_list =[]
for word in comment_word_list:if word not in stop_words:new_list.append((word))
print(new_list)

Day Six

1.评估情感分数

  • 加载积极词汇库和消极词汇库,然后让数据与两个词库进行比对,比对成功一个就让对应数值加一,就可以获得积极词汇数与消极词汇数,从而进行计算评估出情感分数
with open('./dict/emotion_dict/neg_all_dict.txt', mode='r', encoding='utf-8') as f:negative_words = f.read().splitlines()
with open('./dict/emotion_dict/pos_all_dict.txt', mode='r', encoding='utf-8') as f:positive_words = f.read().splitlines()
negative = 0
positive = 0
for word in words:if word in negative_words:negative += 1elif word in positive_words:positive += 1
print(f'negative words num:{negative}\npositive words num:{positive}')

2.词云图

  • wordcloud库:三方库,使用其中的WordCloud方法
import sqlite3
import jieba
from wordcloud import WordCloudcomment_word_list = [',', ',', '同学', '看', '了', '一直', '夸', '太漂亮', '了']
comments_str = ' '.join(comment_word_list)
# print(comments_str)font = './simkai.ttf'
wc = WordCloud(font_path=font,background_color='white',width=1000,height=800,min_font_size=10,max_font_size=100).generate(comments_str)
wc.to_file('./词云图Test.png')

3.数据可视化

  • Pygal库 http://www.pygal.org/en/stable/
  • 常用的图表都有,可以自行选择
  • 保存文件使用render_to_file('文件路径 ') 方法,存为svg格式
import sqlite3
import pygalconnect = sqlite3.connect('../Day 5/JDcomments.db')
cursor = connect.cursor()cursor.execute("""SELECT COUNT(id),product_color FROM JD_comments GROUP BY product_color;""")
data = cursor.fetchall()pie_chart = pygal.Pie()
pie_chart.title = 'iphone 颜色爱好饼状图'
for i in data:# print(type(i[1]), i[0])pie_chart.add(i[1], i[0])
pie_chart.render_to_file('./JD评论数据可视化.svg')

Python实训笔记相关推荐

  1. Python实训day11pm【大作业简略解析】

    Python实训-15天-博客汇总表 目录 1.课堂笔记 2.群消息 3.代码 3.1.demo1 3.2.demo2 1.课堂笔记 大作业题目思路引导: 题目1:定时爬取每个地级市的实时天气状况.存 ...

  2. Python实训-15天-博客汇总表

    目录 1.课程安排 1.1.课程介绍 1.2.课程目标 2.课件 2.1.课件and录屏 2.2.练习and案例and作业 3.实训博客笔记 第1周-week1 day01 day02 day03 d ...

  3. python实训day1

    今日作业: name=' aleX' print(name) print(name.strip()) print(name.startswith('al')) print(name.endswith( ...

  4. Python实训day08am【网络爬虫selenium、图像处理入门】

    Python实训-15天-博客汇总表 目录 1.网络爬虫-selenium(歌曲与歌词) 2.图像处理 2.1.安装库 2.2.图片处理 2.3.马赛克 2.4.副本-缩略图-粘贴-创建新图 2.5. ...

  5. 大学python实训总结-千锋Python实训总结 学好基础才能走的更远

    时间飞逝,不知不觉在千锋学习Python已经一个月了,在这不长不短的一个月时间感觉我以往的生活方式和学习方式完全被改变了,希望我能继续保持这样的求学心态和学习态度.下面这个Python实训总结就是我对 ...

  6. Python实训day14pm【Python网络爬虫综合大作业-参考解析】

    Python实训-15天-博客汇总表 题目:天气数据的爬取和统计 大作业题目思路引导:定时爬取每个地级市的实时天气状况.存入excel中.为每个城市生成html展示.历史excel文件以每日为单位归档 ...

  7. Python实训day14am【Python网络爬虫综合大作业-答辩】

    Python实训-15天-博客汇总表 实训总结: 由浅入深的了解了python语言应用: 编写了很多案例,完成了发作业,提升了编程思路和能力: 了解了行业现状,认识到企业对人才的要求,去除焦虑,对后续 ...

  8. Python实训day13am【Python网络爬虫综合大作业PPT】

    Python实训-15天-博客汇总表   今天上午大家抓紧时间继续完成实训报告和PPT,有问题我会在群里跟大家说明, 暂时不用上线直播了. 实训结束后,我会在博客上发布网络爬虫综合大作业题目及解析.

  9. Python实训day12pm【答辩要求、定时器】

    Python实训-15天-博客汇总表 目录 1.答辩安排 2.定时器 1.答辩安排 下午安排: 今天尽量地完成整个项目: 明天完成实训报告,制作小答辩PPT: 后天答辩. PPT要求: 时长5分钟左右 ...

最新文章

  1. pandas.get_dummies函数用法详细解答(实践)
  2. linux ls使用方法,Linux/Ubuntu ls命令详解使用格式和方法
  3. 开源mindmap_Java开发人员访谈的MindMap
  4. 解决编写C#在vscode上面不能输入问题
  5. html弹出框交互,HTML5/SVG模态窗口(对话框)交互动画
  6. 好用的局域网共享工具有哪些?win10系统如何设置?
  7. (原创)十大危险cmd命令代码总结
  8. 终极 Shell on-zshrc
  9. Cobbler批量安装操作系统配置实战
  10. Android模拟器知识以及改造
  11. php 微信 语音,微信语音的上传与下载功能实现详解
  12. Jenkins集成Gitlab实现自动化部署
  13. 《泛型编程与stl》
  14. 一文搞懂PMP挣值管理那些让你头疼的公式
  15. Android键盘的显示和隐藏
  16. php html转换成word,php如何实现html转换word?
  17. 基于双参数蜜蜂算法解决车辆路径问题(Matlab代码实现)
  18. C语言学习笔记(XII)---贪吃蛇
  19. 国外LEAD流量基础
  20. vue-cli5脚手架搭建项目过程详解 -vue组件单元测试

热门文章

  1. 英特尔发布第11代核心Tiger Lake笔记本电脑处理器
  2. 嵌入式linux进行视频监控,嵌入式Linux下的视频监控解决方案
  3. 自己用的感觉很好的C++IDE推荐
  4. Android GMS Checklist【Android gms认证自检表】
  5. 【shell】远程执行shell|多节点并行执行shell|远程执行注意
  6. 一个良好的习惯由二十八天养成。
  7. 解析创客空间机制建设的多样化
  8. 操作系统高级课程-1
  9. Java方法的分类及使用
  10. Google 图片搜索算法