Python实现多线程爬表情包详解

目录
  • 课程亮点
  • 环境介绍
  • 模块使用
  • 流程
    • 一. 分析我们想要的数据内容 是可以从哪里获取
    • 二. 代码实现步骤
  • 导入模块
  • 单线程爬取10页数据
  • 多进程爬取10页数据

课程亮点

系统分析目标网页

html标签数据解析方法

海量图片数据一键保存

环境介绍

python 3.8

pycharm

模块使用

requests >>> pip install requests

parsel >>> pip install parsel

time 时间模块 记录运行时间

流程

一. 分析我们想要的数据内容 是可以从哪里获取

表情包 >>> 图片url地址 以及 图片名字

对于开发者工具的使用 >>>

二. 代码实现步骤

1.发送请求

确定一下发送请求 url地址

请求方式是什么 get请求方式 post请求方式

请求头参数 : 防盗链 cookie …

2.获取数据

获取服务器返回的数据内容

response.text 获取文本数据

response.json() 获取json字典数据

response.content 获取二进制数据 保存图片/音频/视频/特定格式文件内容 都是获取二进制数据内容

3.解析数据

提取我们想要的数据内容

I. 可以直接解析处理

II. json字典数据 键值对取值

III. re正则表达式

IV. css选择器

V. xpath

4.保存数据

文本

csv

数据库

本地文件夹

导入模块

import requests  # 数据请求模块 第三方模块 pip install requests
import parsel  # 数据解析模块 第三方模块 pip install parsel
import re  # 正则表达式模块
import time  # 时间模块
import concurrent.futures

单线程爬取10页数据

1. 发送请求

start_time = time.time()

for page in range(1, 11):
    url = f'https://fabiaoqing.com/biaoqing/lists/page/{page}html'
     headers = {
         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36'
     }
     response = requests.get(url=url, headers=headers)
     # <Response [200]> response 对象 200状态码 表示请求成功

2. 获取数据, 获取文本数据 / 网页源代码

# 在开发者工具上面 元素面板 看到有相应标签数据, 但是我发送请求之后 没有这样的数据返回
# 我们要提取数据, 要根据服务器返回数据内容
# xpath 解析方法 parsel 解析模块  parsel这个模块里面就可以调用xpath解析方法
# print(response.text)

3. 解析数据

# 解析速度 bs4 解析速度会慢一些 如果你想要对于字符串数据内容 直接取值 只能正则表达式
     selector = parsel.Selector(response.text) # 把获取下来html字符串数据内容 转成 selector 对象
     title_list = selector.css('.ui.image.lazy::attr(title)').getall()
     img_list = selector.css('.ui.image.lazy::attr(data-original)').getall()
# 把获取下来的这两个列表 提取里面元素 一一提取出来
# 提取列表元素 for循环 遍历
     for title, img_url in zip(title_list, img_list):

4. 保存数据

# split() 字符串分割的方法 根据列表索引位置取值
# img_name_1 = img_url[-3:] # 通过字符串数据 进行切片
# 从左往右 索引位置 是从 0 开始 从右往左 是 -1开始
         # print(title, img_url)
         title = re.sub(r'[\/:*?"<>|\n]', '_', title)
         # 名字太长 报错
         img_name = img_url.split('.')[-1]   # 通过split() 字符串分割的方法 根据列表索引位置取值
         img_content = requests.get(url=img_url).content # 获取图片的二进制数据内容
         with open('img\\' + title + '.' + img_name, mode='wb') as f:
             f.write(img_content)
         print(title)

多线程爬取10页数据

def get_response(html_url):
    """发送请求"""
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36'
    }
    response = requests.get(url=html_url, headers=headers)
    return response
def get_img_info(html_url):
    """获取图片url地址 以及 图片名字"""
    response = get_response(html_url)
    selector = parsel.Selector(response.text)  # 把获取下来html字符串数据内容 转成 selector 对象
    title_list = selector.css('.ui.image.lazy::attr(title)').getall()
    img_list = selector.css('.ui.image.lazy::attr(data-original)').getall()
    zip_data = zip(title_list, img_list)
    return zip_data
def save(title, img_url):
    """保存数据"""
    title = re.sub(r'[\/:*?"<>|\n]', '_', title)
    # 名字太长 报错
    img_name = img_url.split('.')[-1]  # 通过split() 字符串分割的方法 根据列表索引位置取值
    img_content = requests.get(url=img_url).content  # 获取图片的二进制数据内容
    with open('img\\' + title + '.' + img_name, mode='wb') as f:
        f.write(img_content)
    print(title)

多进程爬取10页数据

def main(html_url):
    zip_data = get_img_info(html_url)
    for title, img_url in zip_data:
        save(title, img_url)
if __name__ == '__main__':
    start_time = time.time()
    exe = concurrent.futures.ThreadPoolExecutor(max_workers=10)
    for page in range(1, 11):
        # 1. 发送请求
        url = f'https://fabiaoqing.com/biaoqing/lists/page/{page}html'
        exe.submit(main, url)
    exe.shutdown()
    end_time = time.time()
    use_time = int(end_time - start_time)
    print('程序耗时: ', use_time)

单线程爬取10页数据 61秒时间

多线程爬取10页数据 19秒时间 >>> 13

多进程爬取10页数据 21秒时间 >>> 18

到此这篇关于Python实现多线程爬表情包详解的文章就介绍到这了,更多相关Python 多线程爬表情包内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2021-11-24

Python基于百度AI实现抓取表情包

本文先抓取网络上的表情图像,然后利用百度 AI 识别表情包上的说明文字,并利用表情文字重命名文件,这样当发表情包时,不需要逐个打开查找,直接根据文件名选择表情并发送. 一.百度 AI 开放平台的 Key 申请方法 本例使用了百度 AI 的 API 接口实现文字识别.因此需要先申请对应的 API 使用权限,具体步骤如下: 在网页浏览器(比如 Chrome 或者火狐) 的地址栏中输入 ai.baidu.com,进入到百度云 AI 的官网,在该页面中单击右上角的 控制台 按钮. 进入到百度云 AI 官

Python基础进阶之海量表情包多线程爬虫功能的实现

一.前言 在我们日常聊天的过程中会使用大量的表情包,那么如何去获取表情包资源呢?今天老师带领大家使用python中的爬虫去一键下载海量表情包资源 二.知识点 requests网络库 bs4选择器 文件操作 多线程 三.所用到得库 import os import requests from bs4 import BeautifulSoup 四. 功能 # 多线程程序需要用到的一些包 # 队列 from queue import Queue from threading import Thread

Python模拟登录微博并爬取表情包

一.开发工具 **Python****版本:**3.6.4 相关模块: DecryptLogin模块: argparse模块: requests模块: prettytable模块: tqdm模块: lxml模块: fake_useragent模块: 以及一些Python自带的模块. 二.环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 三.原理简介 本来这个爬虫是想作为讲python异步爬虫的一个例子的,昨天代码写完测试了一下,结果是我微博账号和ip都直接被封了(并发数

python爬虫系列Selenium定向爬取虎扑篮球图片详解

前言: 作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队.CBA明星.花边新闻.球鞋美女等等,如果一张张右键另存为的话真是手都点疼了.作为程序员还是写个程序来进行吧! 所以我通过Python+Selenium+正则表达式+urllib2进行海量图片爬取. 运行效果: http://photo.hupu.com/nba/tag/马刺 http://photo.hupu.com/nba/tag/陈露 源代码: # -*- coding: utf

Python进阶之使用selenium爬取淘宝商品信息功能示例

本文实例讲述了Python进阶之使用selenium爬取淘宝商品信息功能.分享给大家供大家参考,具体如下: # encoding=utf-8 __author__ = 'Jonny' __location__ = '西安' __date__ = '2018-05-14' ''' 需要的基本开发库文件: requests,pymongo,pyquery,selenium 开发流程: 搜索关键字:利用selenium驱动浏览器搜索关键字,得到查询后的商品列表 分析页码并翻页:得到商品页码数,模拟翻页

python根据用户需求输入想爬取的内容及页数爬取图片方法详解

本次小编向大家介绍的是根据用户的需求输入想爬取的内容及页数. 主要步骤: 1.提示用户输入爬取的内容及页码. 2.根据用户输入,获取网址列表. 3.模拟浏览器向服务器发送请求,获取响应. 4.利用xpath方法找到图片的标签. 5.保存数据. 代码用面向过程的形式编写的. 关键字:requests库,xpath,面向过程 现在就来讲解代码书写的过程: 1.导入模块 import parsel # 该模块主要用来将请求后的字符串格式解析成re,xpath,css进行内容的匹配 import req

Python模拟登录12306的方法

本文实例讲述了Python模拟登录12306的方法.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: #!/usr/bin/python # -*- coding: utf-8 -*-   import re; import sys; import cookielib; import urllib; import urllib2; import optparse; import json; import httplib2; reload(sys) sys.setdefaulten

Python实现登录人人网并抓取新鲜事的方法

本文实例讲述了Python实现登录人人网并抓取新鲜事的方法.分享给大家供大家参考.具体如下: 这里演示了Python登录人人网并抓取新鲜事的方法(抓取后的排版不太美观~~) from sgmllib import SGMLParser import sys,urllib2,urllib,cookielib class spider(SGMLParser): def __init__(self,email,password): SGMLParser.__init__(self) self.h3=F

Java模拟登录正方教务抓取成绩、课表、空教室

本文实例为大家分享了Java模拟登录正方教务抓取成绩.课表.空教室等信息,供大家参考,具体内容如下 1.Jwgl.java package com.ican.yueban.jwgl; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import org.apache.http.Ht

Python多线程爬虫实战_爬取糗事百科段子的实例

多线程爬虫:即程序中的某些程序段并行执行, 合理地设置多线程,可以让爬虫效率更高 糗事百科段子普通爬虫和多线程爬虫 分析该网址链接得出: https://www.qiushibaike.com/8hr/page/页码/ 多线程爬虫也就和JAVA的多线程差不多,直接上代码 ''' #此处代码为普通爬虫 import urllib.request import urllib.error import re headers = ("User-Agent","Mozilla/5.0

使用python爬虫实现网络股票信息爬取的demo

实例如下所示: import requests from bs4 import BeautifulSoup import traceback import re def getHTMLText(url): try: r = requests.get(url) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "" def getStockList(lst, stockUR

基于Python的Post请求数据爬取的方法详解

为什么做这个 和同学聊天,他想爬取一个网站的post请求 观察 该网站的post请求参数有两种类型:(1)参数体放在了query中,即url拼接参数(2)body中要加入一个空的json对象,关于为什么要加入空的json对象,猜测原因为反爬虫.既有query参数又有空对象体的body参数是一件脑洞很大的事情. 一开始先在apizza网站 上了做了相关实验才发现上面这个规律的,并发现该网站的请求参数要为raw形式,要是直接写代码找规律不是一件容易的事情. 源码 import requests im

利用Python模拟登录pastebin.com的实现方法

任务 在https://pastebin.com网站注册一个账号,利用python实现用户的自动登录和创建paste.该任务需要分成如下两步利用python实现: 1.账号的自动登录 2.paste的自动创建 模拟账号登录 模拟登录,需要知道登录的URL是什么,那么登录URL怎么去看呢. 进入https://pastebin.com/之后,发现是以访客的身份进入的,点击身份图像的下拉中的LOGIN,进入登录页面,打开Chrome开发工具,选择Network,勾选Preserve log: 输入用