如何使用Scrapy框架爬取301跳转后的数据

简介: 如何使用Scrapy框架爬取301跳转后的数据

在我们python强大的库里面,Scrapy是一个功能强大的网络爬虫框架,允许开发者轻松地抓取和解析网站内容。在爬取有些网站数据的时候会遇到网页跳转的情况,一般HTTP返回状态码是200,非200状态码,需要单独处理。Scrapy默认只处理200状态码响应,非200状态码响应需要单独设置,如301永久跳转。
可以只处理301跳转
```class MySpider(scrapy.Spider):
handle_httpstatus_list = [301]

也可以单独设置某个请求
``scrapy.request('http://url.com', meta={'handle_httpstatus_list': [301]})

那么301和302 Http状态有啥区别?
301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于: 301 redirect: 301 代表永久性转移(Permanently Moved), 302redirect: 302 代表暂时性转移(Temporarily Moved )。在项目实际中大家选择301跳转的可能性都要大些,因为SEO(搜索引擎优化)中提到一点:如果我们把一个地址采用301跳转方式跳转的话,搜索引擎会把老地址的PageRank等信息带到新地址,同时在搜索引擎索引库中彻底废弃掉原先的老地址 ,当然Http 状态 200 标示没有任何问题发生。  这里我们通过Scrapy框架访问百度跳转后的数据给大家参考下:

``` #! -- encoding:utf-8 --
import base64
import sys
import random

    PY3 = sys.version_info[0] >= 3

    def base64ify(bytes_or_str):
        if PY3 and isinstance(bytes_or_str, str):
            input_bytes = bytes_or_str.encode('utf8')
        else:
            input_bytes = bytes_or_str

        output_bytes = base64.urlsafe_b64encode(input_bytes)
        if PY3:
            return output_bytes.decode('ascii')
        else:
            return output_bytes

    class ProxyMiddleware(object):                
        def process_request(self, request, spider):
            # 代理服务器(产品官网 www.16yun.cn)
            proxyHost = "t.16yun.cn"
            proxyPort = "31111"

            # 代理验证信息
            proxyUser = "username"
            proxyPass = "password"

            # [版本>=2.6.2](https://docs.scrapy.org/en/latest/news.html?highlight=2.6.2#scrapy-2-6-2-2022-07-25)无需添加验证头,会自动在请求头中设置Proxy-Authorization     
            request.meta['proxy'] = "http://{0}:{1}@{2}:{3}".format(proxyUser,proxyPass,proxyHost,proxyPort)

            # 版本<2.6.2 需要手动添加代理验证头
            # request.meta['proxy'] = "http://{0}:{1}".format(proxyHost,proxyPort)
            # request.headers['Proxy-Authorization'] = 'Basic ' +  base64ify(proxyUser + ":" + proxyPass)                    

            # 设置IP切换头(根据需求)
            # tunnel = random.randint(1,10000)
            # request.headers['Proxy-Tunnel'] = str(tunnel)

            # 每次访问后关闭TCP链接,强制每次访问切换IP
            request.header['Connection'] = "Close"

```

相关文章
|
1月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
113 6
|
2月前
|
数据采集 中间件 开发者
Scrapy爬虫框架-自定义中间件
Scrapy爬虫框架-自定义中间件
64 1
|
2月前
|
数据采集 中间件 Python
Scrapy爬虫框架-通过Cookies模拟自动登录
Scrapy爬虫框架-通过Cookies模拟自动登录
122 0
|
1月前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
86 4
|
2月前
|
数据采集 前端开发 数据处理
Scrapy的Lambda函数用法:简化数据提取与处理的技巧
在现代爬虫开发中,**Scrapy** 是一个广泛使用的高效 Python 框架,适用于大规模数据爬取。本文探讨如何利用 Python 的 **Lambda 函数** 简化 Scrapy 中的数据提取与处理,特别是在微博数据爬取中的应用。通过结合 **代理IP**、**Cookie** 和 **User-Agent** 设置,展示了实际用法,包括代码示例和优化技巧,以提高爬虫的稳定性和效率。使用 Lambda 函数能显著减少代码冗余,提升可读性,有效应对复杂的数据清洗任务。
|
2月前
|
消息中间件 数据采集 数据库
小说爬虫-03 爬取章节的详细内容并保存 将章节URL推送至RabbitMQ Scrapy消费MQ 对数据进行爬取后写入SQLite
小说爬虫-03 爬取章节的详细内容并保存 将章节URL推送至RabbitMQ Scrapy消费MQ 对数据进行爬取后写入SQLite
37 1
|
2月前
|
数据采集 中间件 数据挖掘
Scrapy 爬虫框架(一)
Scrapy 爬虫框架(一)
59 0
|
2月前
|
数据采集 XML 前端开发
Scrapy 爬虫框架(二)
Scrapy 爬虫框架(二)
52 0
|
4月前
|
数据采集 中间件 调度
Scrapy 爬虫框架的基本使用
Scrapy 爬虫框架的基本使用
|
4月前
|
数据采集 存储 中间件
Python进行网络爬虫:Scrapy框架的实践
【8月更文挑战第17天】网络爬虫是自动化程序,用于从互联网收集信息。Python凭借其丰富的库和框架成为构建爬虫的首选语言。Scrapy作为一款流行的开源框架,简化了爬虫开发过程。本文介绍如何使用Python和Scrapy构建简单爬虫:首先安装Scrapy,接着创建新项目并定义爬虫,指定起始URL和解析逻辑。运行爬虫可将数据保存为JSON文件或存储到数据库。此外,Scrapy支持高级功能如中间件定制、分布式爬取、动态页面渲染等。在实践中需遵循最佳规范,如尊重robots.txt协议、合理设置爬取速度等。通过本文,读者将掌握Scrapy基础并了解如何高效地进行网络数据采集。
253 6

相关课程

更多

相关实验场景

更多