使用Scarpy框架简单的写个爬虫

2024-06-08 17:37:12 浏览数 (2)

python提供了很多的框架供大家选择使用,今天给大家重点介绍下Python开发的一个快速、高层次的web数据抓取框架——Scrapy框架,它主要用于抓取web站点并从页面中提取结构化的数据。 Scrapy不仅在爬虫中应该广泛,优点也是很突出的,因为它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等。 经常会在网上看到很多初学 Scarpy的小伙伴抱怨完全不清楚Scrapy该怎样入手,即便看的是中文的文档,也感到很难理解,这应该是大多数的学爬虫的困惑。我觉得大家之所以感到Scrapy难学,主要原因应该是其官方文档实在太过凌乱,又缺少实用的代码例子,让人看得云里雾里,不知其所已然。虽然有这样的困惑在,但依然阻挡不了他的吸引力,用过这个框架的都知道它应该是Python提供的框架中目前最好用的一个。其架构的思路、爬取执行的效能,还有可扩展的能力都非常出众,再配以Python语言的简洁轻巧,使得爬虫的开发事半功倍。 接下来我们就使用这个框架简单的写个爬虫,简单的获取下百度数据,代码如下所示:

代码语言:javascript复制
#! -*- 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"

                request.meta['proxy'] = "http://{0}:{1}".format(proxyHost,proxyPort)


                # [版本>=2.6.2](https://docs.scrapy.org/en/latest/news.html?highlight=2.6.2#scrapy-2-6-2-2022-07-25)无需添加验证头,会自动在请求头中设置Proxy-Authorization     
                # 版本<2.6.2 需要手动添加代理验证头
                # 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"

这是今天小编推荐的爬虫内容,框架的选择也根据个人的喜欢,并不是都要选择Scarpy框架,如果对爬虫框架和一些反爬技术感兴趣的可以搜索亿牛云详细咨询了解。

0 人点赞