爬取表情包

  这是我第一次在这写博客,还是有点兴奋。

  我也是刚接触Python不久,发现Python代码真的很强大,简单就可以处理复杂的事。最近很想写个爬虫,但水平没达到,正好CSDN学院有个公开课,黄勇老师讲的《90分钟掌握Python多线程爬虫(全程实战)》,3月6日晚20:00我听了直播,当时没跟上,等看了回播才搞明白(可能我是Python2课里是Python3,找理由O(∩_∩)O哈哈~)。

  先上笔记:

爬虫的流程分析:

1、请求数据:requests库(这个库可以很方便的去请求网络数据)    *安装方法:pip install requests2、将请求下来的数据解析出来,获取我们想要的数据,把不想要的数据抛弃掉    *Beautifulsoup:pip install bs4    *lxml:pip install lxml3、将解析后的数据保存下来,如果是文字类型,可以保存到文件中或者数据库中或者缓存中,如果是文件类型,比如图片、视频,那么可以保存到硬盘中4、无论你的爬虫是大还是小,都是由这几个模块组成的。

在此感谢黄勇老师,也不啰嗦了,直接上代码。

#coding:utf-8
import requests
import os
from bs4 import BeautifulSoup
import urllib
import threading
# 首先要进行身份伪装
Headers = {‘User-Agent‘: ‘Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Mobile Safari/537.36‘}
PAGE_URLS=[]
IMG_URLS=[]#全局变量IMG_URLS:就是一个列表,这个列表存储了很多表情包的链接
gLock=threading.Lock()
def producer():
    ‘‘‘生产者:专门用来从网站获取表情包的url链接,相当于增加IMG_URLS中的数据‘‘‘
    while True:
        gLock.acquire()#多线程对全局变量操作必须加锁
        if len(PAGE_URLS)==0:
            gLock.release()#跳出循环退出程序前也必须解锁
            break
        page_url=PAGE_URLS.pop()#pop函数将列表中最后一项删除,并返回删除的项
        gLock.release()#操作完成记得解锁
        response = requests.get(page_url, Headers)#获取网页数据,返回response
        text = response.text
        # print text
        soup = BeautifulSoup(text, ‘lxml‘)#实例BeautifulSoup对象解析数据,使用lxml引擎。当然还可以用其他解析工具,也可用正则表达式,正则表达式比较复杂
        img_list = soup.find_all("img", attrs={"class": "img-responsive lazy image_dta"})#根据标签属性查找自己想要的数据,抛弃其它非表情包图片
        for img in img_list:
            img_url = img[‘data-original‘]#找到图片源网址,img[‘src‘]不是真正的图片源,网址都是一样
            gLock.acquire()
            IMG_URLS.append(img_url)
            gLock.release()

def consumer():
    ‘‘‘消费者:专门从表情包的url链接中下载图片,相当于消耗IMG_URLS中的数据‘‘‘
    while True:
        gLock.acquire()
        if len(IMG_URLS)==0 and len(PAGE_URLS)==0:#刚运行有可能IMG_URLS为空,所以加上PAGE_URLS同时为空才是结束条件
            gLock.release()
            break
        if len(IMG_URLS)>0:
            img_url=IMG_URLS.pop()#为空时pop出错
        else:
            img_url=‘‘
        gLock.release()
        if img_url:
            filename = img_url.split("/")[-1]#将图片地址分割成列表,取最后一项文件名
            fullpath = os.path.join("images", filename)#将images目录名与文件名合并,由于系统不同,不一定就是加"/"
            try:
                urllib.urlretrieve(img_url, fullpath)#urlretrieve函数就是从目标网址下载存储到本地,Python3中在request库中
                # print img_url,"下载完成"
            except Exception as e:
                print e
                print img_url,"下载失败"#还时常出现10054错误,可能是服务器发现了爬虫强行关闭当前链接

def main():
    for x in range(1,100):#爬取1-99页数据
        page_url="https://www.doutula.com/photo/list/?page="+str(x)
        PAGE_URLS.append(page_url)
    for x in range(5):#开启5个生产者线程
        th=threading.Thread(target=producer)
        th.start()
    for x in range(5):#开启5个消费者线程
        th =threading.Thread(target=consumer)
        th.start()
if __name__ == ‘__main__‘:#如果作为程序则执行,如果作为包加载则不执行
    main()

原文地址:https://www.cnblogs.com/hua1121/p/10509846.html

时间: 2024-10-08 10:07:38

爬取表情包的相关文章

python爬虫教程:《利用Python爬取表情包》

python爬虫教程:<利用Python爬取表情包>,微信没有表情包?不用愁!老师带领你使用多线程爬虫一键爬取20w的表情包~ python爬虫教程:<利用Python爬取表情包>,微信没有表情包?不用愁!老师带领你使用多线程爬虫一键爬取20w的表情包~ python爬虫教程:<利用Python爬取表情包>,微信没有表情包?不用愁!老师带领你使用多线程爬虫一键爬取20w的表情包~ python爬虫教程:<利用Python爬取表情包>,微信没有表情包?不用愁!

批量抓取表情包爬虫脚本

import re import os import time import requests import multiprocessing from multiprocessing.pool import ThreadPool picqueue = multiprocessing.Queue() pagequeue = multiprocessing.Queue() logqueue = multiprocessing.Queue() picpool = ThreadPool(50) page

Python开发个人专属表情包网站

“表情包”是一种利用图片来表示感情的一种方式.表情包是在社交软件活跃之后,形成的一种流行文化,表情包流行于互联网上面,基本人人都会发表情. 曾经你是否也有过找不到表情包去应对别人的时候. 今天小编分享如何用Python开发个人专属的表情包网站,想用什么表情包搜一下就有了! 本篇分为两部分 1.爬取表情包存入数据库 2.搭建个人个人专属表情网站 爬取包情包存入数据库 环境:Windows+Python3.6 IDE:个人喜好 模块 1 import requests 2 import re 3 i

Python爬虫入门教程 13-100 斗图啦表情包多线程爬取

写在前面 今天在CSDN博客,发现好多人写爬虫都在爬取一个叫做斗图啦的网站,里面很多表情包,然后瞅了瞅,各种实现方式都有,今天我给你实现一个多线程版本的.关键技术点 aiohttp ,你可以看一下我前面的文章,然后在学习一下. 网站就不分析了,无非就是找到规律,拼接URL,匹配关键点,然后爬取. 撸代码 首先快速的导入我们需要的模块,和其他文章不同,我把相同的表情都放在了同一个文件夹下面,所以需要导入os模块 import asyncio import aiohttp from lxml imp

spider_爬取斗图啦所有表情包(图片保存)

"""爬取斗图吧里面的所有表情包 知识点总结: 一.使用requests库进行爬取,随机请求头(网站反爬措施少.挂个请求头足矣) 二.具体思路: 1.先爬取所有的图片url,放在列表里 2.循环遍历url请求这些图片, 3.将图片进行分类保存三.分类保存用到一个知识点,endwith(以***结尾) 使用这个函数,将jpg,gif,png等不同类型的图片分开四.演示案例中,只爬取了前20页.五.各个定义的数字变量意思为: n=1 网页页数 num=1 保存图片数 注:该案例主

【Python3 爬虫】U28_多线程爬取斗图啦的表情包

目录 1.需求描述 2.实战代码 2.1 单线程爬取 2.2 多线程版 1.需求描述 爬取斗图啦网站,地址为:https://www.doutula.com/photo/list/[Python3 爬虫]U28_多线程爬取斗图啦的表情包 原文地址:https://www.cnblogs.com/OliverQin/p/12636681.html

用python爬取 20w 表情包之后,感叹我族人是多么强大!

是这样的 有一次想要斗图 配图 就在网上搜索表情包 然后发现了一个表情巨多的网站 不小心动起了邪念 产生了兴趣 那就 把它们存下来吧 用 requests 请求了一下 发现这个网站没有做反爬 发现这里有 4k+ 的页面 简单的切换一下页面 可以发现 第一页的链接是这样的 https://fabiaoqing.com/biaoqing/lists/page/1.html 所以以此类推 构建一下所有url _url = 'https://fabiaoqing.com/biaoqing/lists/p

爬站长之家表情包

1 from bs4 import BeautifulSoup 2 import os 3 import requests 4 5 #获取页面内容 6 def getHtmlText(url, s='text'): 7 try: 8 r = requests.get(url, timeout=30) 9 r.raise_for_status() 10 r.encoding = r.apparent_encoding 11 if s == 'text': 12 return r.text 13 e

scrapy爬取斗图表情

用scrapy爬取斗图表情,其实呀,我是运用别人的博客写的,里面的东西改了改就好了,推存链接" http://www.cnblogs.com/jiaoyu121/p/6992587.html " 首先建立项目:scrapy startproject doutu 在scrapy框架里先写自己要爬取的是什么,在item里面写. import scrapyclass DoutuItem(scrapy.Item): # define the fields for your item here