如果我要用Python偷表情包
😺 开头先BB两句
一个个手动保存图片吗?
人生苦短,我用Python
下面是两个充满表情包的网址:
🚀斗图啦
🚀斗图网
爬取表情包,用到的关键代码,拿出来简单说一下。
毕竟,我对Python
也不是很熟,用到什么就马克记录一下下。
👑 大体思路:
- 通过
requests.get()
发送get请求 - 拿到
爬取
的网页数据,然后找到其中的表情包 - 把表情包
保存
至本地文件夹中
🎁 知识点:
1.requests库
requests.get()
发送get请求
安装
pip install requests
引入
import requests
requests带请求参数的get请求
url = 'http://www.bbsnet.com/biaoqingbao'
res = requests.get(url)
修改编码方式:
response.content.deocde(“utf-8”)
html = res.content.decode(('utf-8'))
2.lxml模块etree类的使用
安装
pip install lxml
引入
from lxml import etree
利用etree.HTML(
)将html字符串转化为element对象
tree = etree.HTML(html)
element对象的xpath方法
Element对象具有xpath的方法,返回结果的列表,能够接受bytes类型的数据和str类型的数据
xpath 全称:XML Path Language是一种小型的查询语言
是一门在XML文档中查找信息的语言
XPath的优点:
可在XML中查找信息
支持HTML的查找
可通过元素和属性进行导航
根据爬取的网页数据,分析所知,表情包图片在 id 为 post_container 的列表里面,通过 xpath 可以精确查到表情包的位置。
li_list = tree.xpath('//ul[@id="post_container"]/li')
3.Python "{}.format()" 输出格式化方法
Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
实例:
"{0} {1}".format("hello", "world") # 设置指定位置
也可以设置参数:
print("网站名:{name}, 地址 {url}".format(name="哔哩哔哩", url="https://www.bilibili.com/"))
4.with open() as f:用法
python中open() 函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写。
with 关键字
可以在语句结束后,关闭文件流。不用with关键字,文件会被python垃圾回收关闭。不用with,记得f.close()
常见用法:
with open(r'filename.txt') as f:
for l in f:
l = json.loads(l) #文件的读操作
with open('Hello.txt', 'w') as f:
f.write('hello world') #文件的写操作
标识符
with open('Hello.txt', 'w') as f: #为标识符
常用标识符的含义
r: 以只读方式打开文件。
rb: 以二进制格式打开一个文件用于只读。
r+: 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+:以二进制格式打开一个文件用于读写。
w: 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb: 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+: 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+:以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a:打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab: 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+: 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
f的方法属性:
file.read([size]) #将文件数据作为字符串返回,可选参数size控制读取的字节数
file.readlines([size]) #返回文件中行内容的列表,size参数可选
file.write(str) #将字符串写入文件
file.writelines(strings) #将字符串序列写入文件
file.close() #关闭文件
file.closed #表示文件已经被关闭,否则为False
file.mode #Access文件打开时使用的访问模式
file.encoding #文件所使用的编码
file.name #文件名
file.newlines #未读取到行分隔符时为None,只有一种行分隔符时为一个字符串,当文件有多种类型的行结束符时,则为一个包含所有当前所遇到的行结束的列表
file.softspace #为0表示在输出一数据后,要加上一个空格符,1表示不加。这个属性一般程序员用不着,由程序内部使用
完整代码,点击详细信息查看
import requests
from lxml import etree
class EmojiSpider(object):
# 第一种方法__init__()方法是一种特殊的方法,
# 被称为类的构造函数或初始化方法,
# 当创建了这个类的实例时就会调用该方法
def __init__(self):
self.header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
}
self.name = 1
def get(self, url):
res = requests.get(url, headers=self.header)
html = res.content.decode(('utf-8'))
return html
def parse_picture(self, html):
tree = etree.HTML(html)
li_list = tree.xpath('//ul[@id="post_container"]/li')
img_list = []
for li in li_list:
img_url = li.xpath('./div/a/img/@src')
for img in img_url:
img_list.append(img)
return img_list;
def save(self, img_list):
for img in img_list:
response = requests.get(img)
filename = './img/表情{}.gif'.format(self.name)
print('正在爬取第{}张表情包'.format(self.name))
# with open用法
# 上下文管理
# 使用with关键字,上下文管理针对的是with后的对象
# 使用with... as 关键字
# 上下文管理的语句块并不会开启新的作用域
# 文件对象上下文管理1.进入with时,with后的文件对象是被管理对象
# as子句后的标识符,指向with后的文件对象
# with语句块执行完的时候,会自动关闭文件对象
with open(filename, 'wb') as f:
f.write(response.content)
self.name += 1
def main(self):
url = 'http://www.bbsnet.com/biaoqingbao'
html = self.get(url);
save_list = self.parse_picture(html)
self.save(save_list)
if __name__ == '__main__':
e = EmojiSpider();
e.main()
🚴 结果
运行Python文件,如你所愿,表情包乖乖的跑到了我的文件夹里面。
🍌 Tips
除此之外,还可以在Chrome浏览器上安装扩展程序。
插件:图片助手(ImageAssistant) 批量图片下载。
通过插件下载,比Python爬表情包快得多。
人生苦短,我用图片助手(ImageAssistant)
不要浪费你宝贵的时间学习 Python
手动狗头。
😁 最后的话
以上,如果对你有用的话,不妨点赞收藏关注一下,谢谢 🙏
转载自:https://juejin.cn/post/7137104032359219208