python爬取 20w 表情包之后,从此你就成为了微信斗图届的高手



常常有 b 友问我

“小帅b,你哪来那么多的表情包”





当然是爬取来的啊

不瞒你说

在我的电脑里面

除了一些老师的教程之外

还有满满当当的表情包





每一个表情包都是那么的

生动有趣

是它们拯救了我们人类的尴尬

是它们拯救了多少的直男

是它们…


好吧

编不下去了






答应你们

这次腾出点时间

就来说说

小帅b是怎么玩表情包的



如何实现的呢?

那么接下来就是

学习 python 的正确姿势



是这样的

有一次小帅b想要斗图

配图

就在网上搜索表情包


然后发现了一个表情巨多的网站

不小心动起了邪念

产生了兴趣



那就

把它们存下来吧


用 requests 请求了一下

发现这个网站没有做反爬


小帅b发现这里有 4k+ 的页面



简单的切换一下页面

可以发现

第一页的链接是这样的


https://fabiaoqing.com/biaoqing/lists/page/1.html


所以以此类推

构建一下所有url


_url = https://fabiaoqing.com/biaoqing/lists/page/{page}.html'urls = [_url.format(page=page) for page in range(1, 4328+1)


这样我们就可以得到所有表情包的链接了


我们来看一下页面里面的信息


在这里

我们只需要图片的地址和图片的名称即可


所以我们只要获取到每个页面的

所有 img 标签就可以了


可以使用 BeautifulSoup 根据类名获取


response = requests.get(url)soup = BeautifulSoup(response.content, ‘lxml’)img_list = soup.find_all(‘img’, class_=‘ui image lazy’)



拿到了页面里面的所有 img

那么就可以获取每个图片的地址和名称

从而下载到我们想要的位置


  for img in img_list:       image = img.get(‘data-original’)       title = img.get(‘title’)       # print(image)       with open(path + title + os.path.splitext(image)[-1], ‘wb’) as f:            img = requests.get(image).content            f.write(img)


至此

几行代码就搞定了


先来测试一下

下载一个页面的图片





可以发现

每张图片都获取到了

效果还行


不过

要下载那么多张表情包的话

这样写的代码有点慢了





还是开启多线程吧

对于这种 IO 操作

还是能加快不少下载时间的


 queue = Queue()    path = ‘/home/wistbean/biaoqingbao/‘
# 创建线程 for x in range(10): worker = DownloadBiaoqingbao(queue, path) worker.daemon = True worker.start()
# 加入队列 for url in urls: queue.put(url)
queue.join()



在这里创建了 DownloadBiaoqingbao 这个线程类

然后创建 10 个线程


把 url 添加到队列中

来运行一下





这时候文件夹就写入表情包啦





经过一段时间

小帅b的文件夹就存满了各种表情包了哈哈哈

谁敢跟我斗图

我就砸死他






不过呢

有个问题

文件夹里面的图片太多了


需要检索一下才行

比如我们要找到关于

小老弟

的表情包


那么我们可以使用

glob


import globfor name in glob.glob(‘/home/wistbean/biaoqingbao/小老弟.):    print(name)


通过 这个符号进行模糊匹配

运行一下可以得到所有含有“小老弟”的表情包




到这里

已经有了大量的表情包

也可以通过关键词检索到表情包了


那么如何进一步用到微信来呢

嘿嘿,我得意的笑



开下脑洞

我们使用微信的接口和 python 对接一下


比如

我发送给我的微信说

我要关于沙雕的表情包,发 6 张来


这个时候

python接收到指令

然后就去检索表情包

发送回我的微信



岂不美哉~



说干就干


可以使用 itchat 这个模块

使用网页版微信的方式登录


itchat.auto_login(hotReload=True)itchat.run()


运行这段代码可以得到二维码

扫一下就可以登录进去操作微信了


接着就可以根据小帅b发送过来的关键词

进行文件搜索


imgs = []
def searchImage(text): print(‘收到关键词: ‘, text) for name in glob.glob(‘/home/wistbean/biaoqingbao/+text+‘.jpg’): imgs.append(name)


然后就可以在回复微信的时候发送图片给自己了


在这里就给自己发前 6 张图片吧


@itchat.msg_register([PICTURE, TEXT])def text_reply(msg): searchImage(msg.text) for img in imgs[:6]: msg.user.send_image(img) time.sleep(0.3) print(‘开始发送表情:’, img) imgs.clear()


但这里有个问题

就是 itchat 在发送图片的时候

中文名的文件发了没有反应


后来小帅b发现是 requests 库的问题

修改它的 fields.py


    value = email.utils.encode_rfc2231(value, ‘utf-8’)    # value = ‘%s=%s’ % (name, value)    value = ‘%s=”%s”‘ % (name, value.encode(‘utf-8’))


也就是将

value = ‘%s=%s’ % (name, value)

改成

value = ‘%s=”%s”‘ % (name, value.encode(‘utf-8’))


ok


搞定

运行之后是这样的






ok

以上


当然还可以优化一下

比如每次加载更多同类型的表情包

将表情包发送给特定的人等等

自己去玩吧





本篇文章涉及到的源代码已上传

在公众号后台发送“表情包”即可获取


那么

我们下回见

peace


扫一扫

学习 Python 没烦恼



也许你想知道:

长江后浪推前浪,Requests 库把 urllib 库拍在沙滩上

有了 BeautifulSoup ,妈妈再也不用担心我的正则表达式了

就这么说吧,如果你不懂多线程和线程池,那就去河边摸鱼!



点个在看啊~~(破音)



title: 520了,如果你的另一半是个程序员,发这个给TA
toc: true
date:
thumbnail: https://fxxkpython.com/images/shuaib1.jpg
tags:
- python
- python爬虫
- Mysql
- pymysql
- python爬虫实战
- python爬虫系列教程
- python 爬虫入门教程
categories: python爬虫





马上 520 啦

小帅b祝有情人总成眷属

和我一样是单身狗的

那就继续单着吧..




接下来

小帅b传授你一点程序员

才能懂的骚话情话


相信 TA 看到会开心的






1.我在全世界找一个和你一样的人:


SELECT
FROM World
WHERE “Someone”
LIKE “%YOU%”


目前返回的结果是:Query OK, Empty set (0.00 sec)


但我坚信,有一天,会返回一条记录,那条记录无法delete。



2.你愿意用这公式画个图么:


sqrt(9-x^2),(sqrt(cos(x))cos(200x)+sqrt(abs(x))-0.7)(4-x*x)^0.01, -sqrt(9-x^2)


如果你觉得难的话,可以 Google 一下,如果你懒得话,我帮你:




3.如果你可以被创建


如果你可以被new,那么把我的心交给你,让我好好爱你。


MyGirlFriend myGrilFriend = new GirlFriend();
myGrilFriend.letMeLoveYou(Heart myHeart);



4.待我代码编成,娶你为妻可好?


我在循环里,一直等着你 say Yes 的那天,然后我们一直在一起,因为我爱你并且你也爱我。

while(propose.times < 99) {
you.listen(phodal.ask(“will”)(“you”)(“marry”)(“me”));
you.reply.propose ();
}
you.propose(“Yes”);
var ever = I.love(you) && you.love(me);
for(ever){;;;};



5.Bug


如果你是个 Bug,我愿意花一辈子的时间 Debug,不过我不希望你被修复,因为你有 Bug 的样子,很美。



6.当所有事情都准备好了,我却突然不知道该干什么了


$(document).ready(function(){

});



7. 如果可以把你导入到我的人生里


import You;

class MyLife(){

};


那么我的人生,也许有更多的乐趣。



8.假作真时真亦假,无为有处有还无。


if(FALSE == true) TRUE = false; 
if(NULL == exist) exist = NULL;



9.帅b老仙,法力无边~



peace


python爬虫30 | scrapy后续,把「糗事百科」的段子爬下来然后存到数据库中



上回我们说到

兄dei,进来装逼不?


今天


小帅b在付费社区里面

学编程不就是为了赚钱?



最近有朋友在后台私信我说,小帅b啊,

python爬虫29 | 使用scrapy爬取糗事百科的例子,告诉你它有多厉害!


是时候

python爬虫28 | 你爬下的数据不分析一波可就亏了啊,使用python进行数据可视化



通过这段时间

python爬虫27 | 当Python遇到MongoDB的时候,存储av女优的数据变得如此顺滑爽~



上次


我们知道了怎么操作 MySQL 数据库

python爬虫26 | 把数据爬取下来之后就存储到你的MySQL数据库。


小帅b说过


在这几篇中会着重说说将爬取下来的数据进行存储


上次我们说了一种 csv 的存储方式


这次主要来说说怎么将爬取下来的数据保存到 MySQL 数据库


接下来就是


学习python的正确姿势



真香假设


本文假设你已经安装好MySQL


并且懂了一些 MySQL 的使用


例如简单“增删改查”的语句


如果你还没安装 MySQL


可以到以下链接去安装一下


https://www.mysql.com/downloads/




在你的 MySQL 中创建一个数据库吧


就叫…


AV-Idol


用 root 的身份进入你的 MySQL

sudo mysql -u root -p


输入 MySQL 的用户名密码之后


就可以开始操作 MySQL 啦


我们来创建一个数据库


如果 avIdol 这个数据库不存在于我们的 MySQL 里面


那就创建一个出来

mysql> create database if not exists avIdol;Query OK, 1 row affected (0.01 sec)


这样


我们就创建出一个数据库了





接下来


我们就使用 python 来操作这个数据库吧


我们需要使用到 pymysql 这个库


专门用来操作 MySQL 的


可以用 pip 安装一下


 pip install pymysql


接下来我们就连接到我们刚刚创建的数据库


然后在这个数据库里面创建一张 beautyGirls


专门用来存放漂亮美眉的信息


import pymysql
# 使用 connect 方法,传入数据库地址,账号密码,数据库名就可以得到你的数据库对象db = pymysql.connect(“你的数据库地址”, “数据库账号”, “数据库密码”, “avIdol”)
# 接着我们获取 cursor 来操作我们的 avIdol 这个数据库cursor = db.cursor()
# 比如我们来创建一张数据表sql = “””create table beautyGirls ( name char(20) not null, age int)”””cursor.execute(sql)
# 最后我们关闭这个数据库的连接db.close()


运行一下


没报什么错就说明我们成功创建数据表了


我们回到数据库看下是否创建成功



通过 show tables


可以看到我们数据库成功创建了 beautyGirls 这张婊,哦不,表


通过 show full columns from beautyGirls;


可以看到我们在这张表中创建了 name 和 age 这两个字段



有了数据库和数据表了


那么接下来我们就往数据库插入数据看看


import pymysql
# 使用 connect 方法,传入数据库地址,账号密码,数据库名就可以得到你的数据库对象db = pymysql.connect(“localhost”, “root”, “root”, “avIdol”)
# 接着我们获取 cursor 来操作我们的 avIdol 这个数据库cursor = db.cursor()
# 插入一条记录sql = “insert into beautyGirls(name, age) values (‘Mrs.cang’, 18)”
try: cursor.execute(sql) db.commit()except: # 回滚 db.rollback()
# 最后我们关闭这个数据库的连接db.close()



再来数据库查询一下这张表



可以看到


苍老师的数据就被我们插进来了



当你使用 pymysql 对数据进行更新的时候


记得调用


db.commit()


这样才会执行到哦


知道如何创建数据表、插入数据


那么对于更新数据以及删除数据


也是同样的道理


只是 sql 语句不同而已


比如删除 18 岁的苍老师


sql = “delete from beautyGirls where age = ‘%d’” % (18)try:   cursor.execute(sql)   db.commit()except:   db.rollback()


可能你在操作数据库的时候


做一些数据的更新或者添加


有些数据在添加过程可能出现异常


为了让我们的数据能够完全的添加


可以使用


db.rollback()


回滚操作


这样才能让我们的事务具有一致性



当然


我们也可以将 csv 中的内容插入到 MySQL 中


就拿上次我们生成的 xsb.csv 文件来说



我们把这里面的内容插到 xsb 数据库吧


还是一样,我们来创建一个叫做 xsb 的数据库


并且把字符集设置为 UFT-8 ,防止中文乱码


mysql> CREATE DATABASE xsb CHARACTER SET utf8 COLLATE utf8_general_ci;


接着创张帅b表


mysql> CREATE TABLE xsb (name char(20), age char(20), length char(20));Query OK, 0 rows affected (0.34 sec)


回到代码来


这次我们安装一下 mysql 的 python 客户端


pip install mysqlclient 


使用 sqlalchemy 来连接我们的数据库


然后就可以使用代码将 csv 文件的内容插到 xsb 这张表了


import pandas as pdfrom sqlalchemy import create_engine
df = pd.read_csv(‘xsb.csv’)
# 当engine连接的时候我们就插入数据engine = create_engine(‘mysql://root@localhost/xsb?charset=utf8’)with engine.connect() as conn, conn.begin(): df.to_sql(‘xsb’, conn, if_exists=‘replace’)


运行一下


然后打开我们刚刚创建的 xsb 数据库查询一下



可以看到


我们就将 csv 中的内容插入到数据库啦



ok


以上就是使用 python 操作数据库的具体操作


以后小帅b在爬虫项目例子中还会提及 MySQL


那么


我们下回见


peace



Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×