2017-08-01 43 views
-2

设置代理我已经使用Python 2.7和Scrapy 1.3.0如何在Python Scrapy

,我需要设置代理服务器来访问Web

如何设置呢?

这是我在解析

if theurl not in self.ProcessUrls: 
    self.ProcessUrls.append(theurl) 
    yield scrapy.Request(theurl, callback=self.parse) 

,如果我需要确认抓取新的不重复怎么办呢脚本?如果不需要重复抓取这个新的url

+0

我无法设置环境变量,它会影响到其他的服务和工作,我能不能把它放在scrapy脚本? – ZivHus

+0

查看上面链接中的第二个答案 – Nabin

+0

我可以在哪里设置request.meta? – ZivHus

回答

-1

你必须设置http_proxy,https_proxy环境变量。请参阅此:proxy for scrapy

+0

我无法设置环境变量,它会影响其他服务和工作,我可以只在scrapy Script上设置它吗? – ZivHus

+0

你有没有试过这个[scrapy_proxies](https://github.com/aivarsk/scrapy-proxies) – tuannv562

+0

是的,我试过这个,但我不知道DOWNLOADER_MIDDLEWARES是什么值?如果我只有一个代理需要设置它仍然需要阅读文本文件? – ZivHus

0

我们可以使用下列内容:

request = Request(url="http://example.com") 
request.meta['proxy'] = "host:port" 
yield request 

一个简单的实现是象下面这样:

import scrapy 

class MySpider(scrapy.Spider): 
    name = "examplespider" 
    allowed_domains = ["somewebsite.com"] 
    start_urls = ['http://somewebsite.com/'] 

    def parse(self, response): 
     # Here example.com is used. We usually get this URL by parsing desired webpage 
     request = scrapy.Request(url='example.com', callback=self.parse_url) 
     request.meta['proxy'] = "host:port" 
     yield request 

    def parse_url(self, response): 
     # Do rest of the parsing work 
     pass 

如果要使用代理初始:

添加以下为蜘蛛类字段

class MySpider(scrapy.Spider): 
     name = "examplespider" 
     allowed_domains = ["somewebsite.com"] 
     start_urls = ['http://somewebsite.com/'] 
     custom_settings = { 
     'HTTPPROXY_ENABLED': True 
    } 

然后用如下方法start_requests()

def start_requests(self): 
     urls = ['example.com'] 
     for url in urls: 
      proxy = 'some proxy' 
      yield scrapy.Request(url=url, callback=self.parse, meta={'proxy': proxy}) 

    def parse(self, response): 
     item = StatusCehckerItem() 
     item['url'] = response.url 
     return item 
+0

我可以在初始设置代理吗? – ZivHus

+0

我可以在哪里添加custom_settings? – ZivHus

+0

我可以在哪里获得HTML响应?解析?解析函数在start_request下? – ZivHus