重定向爬虫和多线程爬虫

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

在日常爬取工作中会遇到程序返回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```  
相关文章
|
2月前
|
数据采集 存储 前端开发
Java爬虫性能优化:多线程抓取JSP动态数据实践
Java爬虫性能优化:多线程抓取JSP动态数据实践
|
3月前
|
数据采集 存储 JSON
Python爬取知乎评论:多线程与异步爬虫的性能优化
Python爬取知乎评论:多线程与异步爬虫的性能优化
|
29天前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
|
2月前
|
数据采集 机器学习/深度学习 监控
代理IP并发控制:多线程爬虫的加速引擎
在数据采集领域,多线程爬虫结合代理IP并发控制技术,有效突破反爬机制。通过动态代理池与智能并发策略,显著提升采集效率并降低封禁率,成为高效数据抓取的关键方案。
104 0
|
3月前
|
数据采集 存储 Java
多线程Python爬虫:加速大规模学术文献采集
多线程Python爬虫:加速大规模学术文献采集
|
4月前
|
数据采集 存储 Web App开发
多线程爬虫优化:快速爬取并写入CSV
多线程爬虫优化:快速爬取并写入CSV
|
4月前
|
数据采集 网络协议 前端开发
Python多线程爬虫模板:从原理到实战的完整指南
多线程爬虫通过并发请求大幅提升数据采集效率,适用于大规模网页抓取。本文详解其原理与实现,涵盖任务队列、线程池、会话保持、异常处理、反爬对抗等核心技术,并提供可扩展的Python模板代码,助力高效稳定的数据采集实践。
202 0
|
6月前
|
数据采集 存储 网络协议
Java HttpClient 多线程爬虫优化方案
Java HttpClient 多线程爬虫优化方案
|
7月前
|
数据采集 存储 安全
Python爬虫实战:利用短效代理IP爬取京东母婴纸尿裤数据,多线程池并行处理方案详解
本文分享了一套结合青果网络短效代理IP和多线程池技术的电商数据爬取方案,针对京东母婴纸尿裤类目商品信息进行高效采集。通过动态代理IP规避访问限制,利用多线程提升抓取效率,同时确保数据采集的安全性和合法性。方案详细介绍了爬虫开发步骤、网页结构分析及代码实现,适用于大规模电商数据采集场景。
|
8月前
|
数据采集 Java 调度
使用Kotlin实现动态代理池的多线程爬虫
使用Kotlin实现动态代理池的多线程爬虫