文档章节

python爬虫之Scrapy 使用代理配置

元禛慎独
 元禛慎独
发布于 2016/10/28 09:25
字数 342
阅读 569
收藏 1

在爬取网站内容的时候,最常遇到的问题是:网站对IP有限制,会有防抓取功能,最好的办法就是IP轮换抓取(加代理)

下面内容分作两部分第一部分来自网络,第二部分写的使用大蚂蚁代理的代码

###########################第一部分################################################

下面来说一下Scrapy如何配置代理,进行抓取

1.在Scrapy工程下新建“middlewares.py”

1

2

3

4

5

6

7

8

9

10

11

12

13

14

# Importing base64 library because we'll need it ONLY in case if the proxy we are going to use requires authentication

import base64 

# Start your middleware class

class ProxyMiddleware(object):

    # overwrite process request

    def process_request(self, request, spider):

        # Set the location of the proxy

        request.meta['proxy'= "http://YOUR_PROXY_IP:PORT"

  

        # Use the following lines if your proxy requires authentication

        proxy_user_pass = "USERNAME:PASSWORD"

        # setup basic authentication for the proxy

        encoded_user_pass = base64.encodestring(proxy_user_pass)

        request.headers['Proxy-Authorization'= 'Basic ' + encoded_user_pass

2.在项目配置文件里(./pythontab/settings.py)添加

1

2

3

4

DOWNLOADER_MIDDLEWARES = {

    'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware'110,

    'pythontab.middlewares.ProxyMiddleware'100,

}

############################第二部分#######################################

import hashlib
import time
# Start your middleware class
class ProxyMiddleware(object):
    # overwrite process request
    def process_request(self, request, spider):
        # Set the location of the proxy
        request.meta['proxy'] = "http://代理地址:端口"
        appkey="your app key"
        secret="your  sercret num string"
        paramMap = {"app_key": appkey,"timestamp": time.strftime("%Y-%m-%d %H:%M:%S")}
        keys = paramMap.keys()
        keys.sort()
        codes= "%s%s%s" % (secret,str().join('%s%s' % (key, paramMap[key]) for key in keys),secret)
        sign = hashlib.md5(codes).hexdigest().upper()
        paramMap["sign"] = sign
        keys = paramMap.keys()
        authHeader = "MYH-AUTH-MD5 " + str('&').join('%s=%s' % (key, paramMap[key]) for key in keys)
        request.headers['Proxy-Authorization'] = authHeader
        #print authHeader
 

DOWNLOADER_MIDDLEWARES = {
            'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 110,
            'yourproject.middlewares.ProxyMiddleware': 100,
                }
 

© 著作权归作者所有

元禛慎独
粉丝 3
博文 209
码字总数 60366
作品 0
朝阳
程序员
私信 提问
Python3爬虫视频学习教程

大家好哈,现在呢静觅博客已经两年多啦,可能大家过来更多看到的是爬虫方面的博文,首先非常感谢大家的支持,希望我的博文对大家有帮助! 最近,主要的任务就是开发性感美女图片大全,使用p...

yangjiyue0520
2017/11/18
0
0
Python爬虫框架Scrapy学习笔记

Python爬虫框架Scrapy学习笔记 糖宝Python 2019-03-31 18:15 scrapy.png 本文主要内容针对Scrapy有初步了解的同学。结合作者的实际项目中遇到的一些问题,汇成本文。 之后会写一些具体的爬虫...

糖宝lsh
03/31
59
0
Scrapy常见问题(FAQ)

常见问题(FAQ) Scrapy相BeautifulSoup或lxml比较,如何呢? BeautifulSoup 及 lxml 是HTML和XML的分析库。Scrapy则是 编写爬虫,爬取网页并获取数据的应用框架(application framework)。 Scra...

Airship
2015/11/12
468
0
[雪峰磁针石博客]2018最佳人工智能数据采集(爬虫)工具书下载

Python网络数据采集 Python网络数据采集 - 2016.pdf 本书采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导。第 1部分重点介绍网络数据采集...

python测试开发人工智能安全
2018/11/07
251
0
Python Scrapy 爬虫(四):部署与运行

接上篇,在上篇中,我们已经在服务器上搭建好了 Python3 环境以及对应的 virtualenv 虚拟环境了。接下来,我们开始把代码部署到我们的服务器环境并运行。 在部署我们的代码到服务器前,我们来...

雨林_a1d6
2018/06/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【2019年8月版本】OCP 071认证考试最新版本的考试原题-第5题

choose the best answer The CUSTOMERS table has a CUST_LAST_NAME column of data type VARCHAR2. The table has two rows whose COST_LAST_MANE values are Anderson and Ausson. Which q......

oschina_5359
33分钟前
3
0
电脑怎样制作流程图?分享绘制流程图方法

流程图的绘制可以用很多方法来实现,小编经常使用电脑对流程图进行绘制,即简单又便利,相信很多朋友都因为不知道怎样绘制流程图而选择了放弃,今天这篇文章希望可以让大家重拾绘制流程图的信...

干货趣分享
35分钟前
3
0
Elasticsearch 7.x 之文档、索引和 REST API 【基础入门篇】

前几天写过一篇《Elasticsearch 7.x 最详细安装及配置》,今天继续最新版基础入门内容。这一篇简单总结了 Elasticsearch 7.x 之文档、索引和 REST API。 什么是文档 文档Unique ID 文档元数据...

泥瓦匠BYSocket
39分钟前
4
0
TL665x-EasyEVM开发板处理器、flash、RAM

TL665x-EasyEVM是广州创龙基于SOM-TL665x核心板研发的一款TI C66x多核定点/浮点高性能DSP开发板,采用核心板+底板方式,底板尺寸为200mm*106.65mm,采用4*50pin和1*80pin B2B工业级连接器,稳...

Tronlong创龙
43分钟前
3
0
DevExpress Report-XRTable绑定数据

将从跳转前的页面(A)中获取传入的数据(dtOrd、BatchID、ModelID),绑定到Report报表对应的控件 ,代码如下: this.xrtBatchID.Text = sBatchID; this.xrtModel.Text ...

_Somuns
44分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部