【问题标题】:How to use proxy in python script?如何在 python 脚本中使用代理?
【发布时间】:2017-02-15 08:34:51
【问题描述】:

如何在python 网络抓取脚本中使用代理,该脚本可以从亚马逊抓取数据。我需要学习如何通过以下脚本使用代理 脚本在这里

import scrapy
from urls import start_urls
import re

class BbbSpider(scrapy.Spider):

    AUTOTHROTTLE_ENABLED = True
    name = 'bbb_spider'
    # start_urls = ['http://www.bbb.org/chicago/business-reviews/auto-repair-and-service-equipment-and-supplies/c-j-auto-parts-in-chicago-il-88011126']

  
    def start_requests(self):
        for x in start_urls:
            yield scrapy.Request(x, self.parse)

    def parse(self, response):
        
        brickset = str(response)
        NAME_SELECTOR = 'normalize-space(.//div[@id="titleSection"]/h1[@id="title"]/span[@id="productTitle"]/text())'
        #PAGELINK_SELECTOR = './/div[@class="info"]/h3[@class="n"]/a/@href'
        ASIN_SELECTOR = './/table/tbody/tr/td/div[@class="content"]/ul/li[./b[text()="ASIN: "]]//text()'
        #LOCALITY = 'normalize-space(.//div[@class="info"]/div/p/span[@class="locality"]/text())'
        #PRICE_SELECTOR = './/div[@id="price"]/table/tbody/tr/td/span[@id="priceblock_ourprice"]//text()'
        PRICE_SELECTOR = '#priceblock_ourprice'
        STOCK_SELECTOR = 'normalize-space(.//div[@id="availability"]/span/text())'
        PRODUCT_DETAIL_SELECTOR = './/table//div[@class="content"]/ul/li//text()'
        PRODUCT_DESCR_SELECTOR = 'normalize-space(.//div[@id="productDescription"]/p/text())'
        IMAGE_URL_SELECTOR = './/div[@id="imgTagWrapperId"]/img/@src'

        yield {
            'name': response.xpath(NAME_SELECTOR).extract_first().encode('utf8'),
            'pagelink': response.url,
            #'asin' : str(re.search("<li><b>ASIN: </b>([A-Z0-9]+)</li>",brickset).group(1).strip()),
            'price' : str(response.css(PRICE_SELECTOR).extract_first().encode('utf8')),
            'stock' : str(response.xpath(STOCK_SELECTOR).extract_first()),
            'product_detail' : str(response.xpath(PRODUCT_DETAIL_SELECTOR).extract()),
            'product_description' : str(response.xpath(PRODUCT_DESCR_SELECTOR).extract()),
            'img_url' : str(response.xpath(IMAGE_URL_SELECTOR).extract_first()),
        }

start_url 文件在这里

start_urls = ['https://www.amazon.co.uk/d/Hair-Care/Loreal-Majirel-Hair-Colour-Tint-Golden-Mahogany/B0085L50QU', 'https://www.amazon.co.uk/d/Hair-Care/Michel-Mercier-Ultimate-Detangling-Wooden-Brush-Normal/B00TE1WH7U']

【问题讨论】:

标签: python scrapy


【解决方案1】:

据我所知,Python代码有两种使用代理的方法:

  • 设置环境变量http_proxyhttps_proxy,也许是最简单的代理使用方式。

    窗户:

    set http_proxy=http://proxy.myproxy.com  
    set https_proxy=https://proxy.myproxy.com  
    python get-pip.py  
    

    Linux/OS X:

    export http_proxy=http://proxy.myproxy.com
    export https_proxy=https://proxy.myproxy.com
    sudo -E python get-pip.py
    
  • 从 Scrapy 0.8 开始通过 HTTP 代理下载器中间件提供对 HTTP 代理的支持。 ,您可以查看HttpProxyMiddleware

    此中间件通过设置 Request 对象的代理元值来设置 HTTP 代理以用于请求。

    与 Python 标准库模块 urllib 和 urllib2 一样,它遵循以下环境变量:

    http_proxy
    https_proxy
    no_proxy
    

希望这会有所帮助。

【讨论】:

  • 我需要在上面的脚本中使用 HTTP 代理
  • @McGrady 给了你脚本的解决方案,中间件才是王道
【解决方案2】:

如果你想做内部代码。

这样做。

def start_requests(self):
    for x in start_urls:
        req = scrapy.Request(x, self.parse)
        req.meta['proxy'] = 'your_proxy_ip_here'
        yield req

别忘了把它放在settings.py 文件中

DOWNLOADER_MIDDLEWARES = {
'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 1,
}

【讨论】:

    猜你喜欢
    • 2021-04-27
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 2011-04-04
    • 2011-03-27
    • 2012-06-11
    • 1970-01-01
    相关资源
    最近更新 更多