重定向爬虫和多线程爬虫

简介: 爬虫遇到网站跳转重新定向怎么解决,如何实现多线程爬虫加快爬取效率

在日常爬取工作中会遇到程序返回302的情况,这种是网站重新定向问题,就是爬取的网站进行了跳转,我们想要的数据又需要跳转连接才能取到,比如,我们访问 http/www.baidu.com 会跳转到 https/www.baidu.com,发送请求之后,就会返回301状态码,然后返回一个location,提示新的地址,浏览器就会拿着这个新的地址去访问。
一般出现这种情况可能有2方面的原因,一种是网址发生改变,而我们还用旧网址去访问,我们可以直接根据重定向的网址(即新的网址)来请求就可以。还有就是爬虫伪装的不够好,被服务器识别出是爬虫,这种就需要添加User-Agent,Cookie等伪装手段,可以在浏览器中输入about:version查看User-Agent,Cookie。
多线程爬虫指的是之前设计的爬虫都是从上往下依次执行的,也就是单线程爬虫,而在爬虫中使用多线程爬虫技术就可以实现部分爬虫分别执行,也就是在多条线上执行,这种执行结构是多线程爬虫,极大的提高了爬虫的效率,这里拿python获取百度数据来举例,p我们通过python+urllib库+代理IP,并且使用了threading库和time库,使其能够实现多线程采集.实现代码如下:


#要访问的目标页面
targetUrl = “https://www.baidu.com” # 修改为百度

#代理服务器(产品官网 www.16yun.cn)
proxyHost = “t.16yun.cn” proxyPort = “31111”

#代理验证信息
proxyUser = “www.16yun.cn” proxyPass = “16ip”

proxyMeta = “http://%(user)s:%(pass)s@%(host)s:%(port)s” % { “host” : proxyHost, “port” : proxyPort, “user” : proxyUser, “pass” : proxyPass, }

proxy_handler = request.ProxyHandler({ “http” : proxyMeta, “https” : proxyMeta, })

opener = request.build_opener(proxy_handler)

request.install_opener(opener)

#定义一个锁对象,用于控制每200毫秒只能请求一次
lock = threading.Lock()

#定义一个函数,用于发起请求和打印响应
def get_url(): # 获取锁,如果锁被占用,就等待,直到锁释放 lock.acquire() resp = request.urlopen(targetUrl) # 发起请求 # 判断状态码是否为200,如果不是,打印错误信息 if resp.status_code == 200: print(resp.read()) # 打印响应内容 else: print(f"请求失败,状态码为{resp.status_code}") # 打印错误信息 time.sleep(0.2) # 延时200毫秒 # 释放锁,让其他线程可以获取锁 lock.release()

#定义一个列表,用于存放线程对象
threads = []

#创建10个线程,每个线程执行get_url函数
for i in range(10): t = threading.Thread(target=get_url) # 创建线程对象 threads.append(t) # 将线程对象添加到列表中

#启动所有线程
for t in threads: t.start()

#等待所有线程结束
for t in threads: t.join()ru'h```  
相关文章
|
7月前
|
数据采集 存储 Java
高德地图爬虫实践:Java多线程并发处理策略
高德地图爬虫实践:Java多线程并发处理策略
|
7月前
|
数据采集 Python
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
【Python自动化】多线程BFS站点结构爬虫代码,支持中断恢复,带注释
73 0
|
数据采集 Java Python
多线程与多任务异步协程高效爬虫
多线程与多任务异步协程高效爬虫
122 0
|
7月前
|
数据采集 人工智能 数据可视化
Scala多线程爬虫程序的数据可视化与分析实践
Scala多线程爬虫程序的数据可视化与分析实践
|
7月前
|
数据采集 Python
python并发编程:使用多线程,Python爬虫被加速10倍
python并发编程:使用多线程,Python爬虫被加速10倍
68 1
python并发编程:使用多线程,Python爬虫被加速10倍
|
3月前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
1月前
|
数据采集 JavaScript 前端开发
JavaScript重定向对网络爬虫的影响及处理
JavaScript重定向对网络爬虫的影响及处理
|
3月前
|
数据采集
爬虫之多线程,提高效率
爬虫之多线程,提高效率
|
4月前
|
数据采集 网络协议 索引
Python 爬虫技巧:百度页面重定向的自动跟踪与处理
Python 爬虫技巧:百度页面重定向的自动跟踪与处理
|
7月前
|
数据采集 存储 C++
单线程 vs 多进程:Python网络爬虫效率对比
本文探讨了Python网络爬虫中的单线程与多进程应用。单线程爬虫实现简单,但处理速度慢,无法充分利用多核CPU。而多进程爬虫通过并行处理提高效率,更适合现代多核架构。代码示例展示了如何使用代理IP实现单线程和多进程爬虫,显示了多进程在效率上的优势。实际使用时还需考虑代理稳定性和反爬策略。
168 0
单线程 vs 多进程:Python网络爬虫效率对比