首页 > 其他分享 >多线程的爬取

多线程的爬取

时间:2022-08-21 23:13:14浏览次数:64  
标签:__ url ala E5% num 多线程 data

# 导入一个请求的模块
import json
import time
from concurrent.futures.thread import ThreadPoolExecutor

from urllib.parse import urlencode

import requests
# 图片的名字
num = 1
def spider_girl(n):
# url
url = 'https://image.baidu.com/search/acjson?'
# 进行伪装,让浏览器识别我们是正常的
headers = {
# 当前电脑信息
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
# 跳转来的链接
'Referer': 'https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%D0%A1%BD%E3%BD%E3&fr=ala&ala=1&alatpl=normal&pos=0&dyTabStr=MCwzLDIsMSw2LDQsNSw3LDgsOQ%3D%3D',
# 域名
'Host': 'image.baidu.com',
# 用户令牌
'Cookie': 'BDqhfp=%E5%B0%8F%E5%A7%90%E5%A7%90%26%26NaN-1undefined%26%26612%26%262; BIDUPSID=EAFCD464609FC69883B57D4510934815; PSTM=1657891990; BAIDUID=EAFCD464609FC6988BE34F438F7E731E:FG=1; indexPageSugList=%5B%22%E6%98%9F%E7%A9%BA%E5%9B%BE%E7%89%87%22%2C%22%E6%98%9F%E7%A9%BA%22%5D; BAIDUID_BFESS=EAFCD464609FC6988BE34F438F7E731E:FG=1; ZFY=:AwYy:AhVoS6yTQoOv5ELUaLbbsRdPWLaUq6:BfFUsovNI:C; BDRCVFR[0-iYRofrloc]=-48_i3v-l4_uhN8uvFLQhP8; H_PS_PSSID=26350; BA_HECTOR=ak012184000000242l2jq0bv1hg4ekp16; delPer=0; PSINO=6; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; BDRCVFR[dG2JNJb_ajR]=mk3SLVN4HKm; userFrom=ala; ab_sr=1.0.1_YmYwYWQ1OTZmOGM4OThkZDQxZjg2MWNhZDZjZjc1MGQwMDgyOTQ2NzUxMDA1MDI4NDFiNGMyMDYwZTI5NTA4ODljNmY3Njc0YjE2YWVjY2ZmOWRkNzE2MzMzOGFjNmExYWYxYTU2OTY3MzNhZDA3YmQyOTc2ZmZhMjRhNmVjOGY1NDY5ZGYyOWUxYWZkZGE0NmU4ZGUyODY3ZmQ2ODQyNA==; BDRCVFR[-pGxjrCMryR]=mk3SLVN4HKm'
}
# url中的参数
params ={
"tn":"resultjson_com",
"logid":"11459031553873409564",
"ipn":"rj",
"ct":"201326592",
"is":"",
"fp":"result",
"fr":"ala",
"word":"小姐姐",
"queryWord":"小姐姐",
"cl":"2",
"lm":"-1",
"ie":"utf-8",
"oe":"utf-8",
"adpicid":"",
"st":"",
"z":"",
"ic":"",
"hd":"",
"latest":"",
"copyright":"",
"s":"",
"se":"",
"tab":"",
"width":"",
"height":"",
"face":"",
"istype":"",
"qc":"",
"nc":"",
"expermode":"",
"nojc":"",
"isAsync":"",
"pn":n,
"rn":"30",
"gsm":hex(n)[2:],
"1661090568310":"",

}
# 拼接路径
url = url + urlencode(params)
# 发起请求,得到响应
res = requests.get(url, headers=headers)
# print(res)

# 解析数据
#将获取到的json数据转换为python数据
data_list = json.loads(res.text)
for data in data_list['data']:
# 获取图片链接
# 异常捕获
try:
img_url = data['thumbURL']
# 对图片进行请求
resp = requests.get(img_url)
# 对图片进行存储
global num
with open('./img/{}.png'.format(num),'wb') as f1:
print('正在写入第{}张图片'.format(num))
# 写入图片的二进制数据
f1.write(resp.content)
print('第{}张图片写入成功!'.format(num))
num += 1
time.sleep(2)

except:
pass


if __name__ == '__main__':
# 使用多线程
pool = ThreadPoolExecutor(30)
for i in range(1,11):
pool.submit(spider_girl,i*30)
pool.shutdown()
print('执行结束')

标签:__,url,ala,E5%,num,多线程,data
From: https://www.cnblogs.com/longwanghzx/p/16611345.html

相关文章

  • 异步和多线程区别
    异步和多线程区别异步和多线程有什么区别其实,异步是目的,而多线程是实现这个目的的方法。异步是说,A发起一个操作后(一般都是比较耗时的操作,如果不耗时的操作就没有必要异步......
  • springboot多线程环境下注入bean空指针问题解决
    多线程环境下注入bean会出现空指针了..我是怎么知道这个bean有有没有在启动的时候注入进来的呢?用于指示bean包含在SpringApplication中时应该运行的接口。多个CommandL......
  • 多线程实现生产和消费
    若⼲个⽣产者在⽣产产品,这些产品将提供给若⼲个消费者去消费,为了使⽣产者和消费者能并发执⾏,在两者之间设置⼀个能存储多个产品的缓冲区,⽣产者将⽣产的产品放⼊缓冲区中,消......
  • java多线程
    一、定义很多人应该对进程,线程,程序这几个概念混淆.程序指什么?简而言之,程序就是代码,用不同语言编写的代码;什么是进程?进程就是表示程序一次完整的执行;线程指的是,在......
  • 多线程.总结
    packageoop.dxcgaoji;importcom.sun.org.apache.xpath.internal.functions.FuncTrue;importjava.util.concurrent.Callable;importjava.util.concurrent.ExecutionExce......
  • 多线程.线程池
    ExecutorService和ExecutorsExecutorService:真正的线程池接口。常见子类ThreadPoolExecutorvoidexecute(Runnablecommand):执行任务/命令,没有返回值,一般用来执行Run......
  • 多线程.Lock锁
    ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,比较常用的是ReentantLock,可以显式加锁、释放锁synchronized与Lock的对比......
  • 多线程.死锁
    多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。某一个同步块同时拥有“两个以上对......
  • 使用多线程实现四个窗口共同卖票
    创建票对象/***projectName:testSpring**@author:*time:2022/8/2023:04*description:票对象,这里实现Runnable方法来重写Run方法*/publicclassTicketim......
  • JavaSE——多线程
    多线程(⭐⭐⭐⭐⭐)实现多线程方式一:继承Thread类方法介绍方法名说明voidrun()在线程开启后,此方法将被调用执行voidstart()使此线程开始执行,Java虚拟机......