Python爬虫设置代理IP爬取知乎图片

原创 2016年08月31日 00:34:05

本文接着前面两文中提到的内容来继续完善我们的Python爬虫。上文地址:通过Python爬虫爬取知乎某个问题下的图片

设置代理的方式很简单,可以看看这里Requests的官方文档,这里也有对应的中文版介绍,点击打开链接

先简单说下requests代理的使用,摘自上述提到的文档:

如果需要使用代理,你可以通过为任意请求方法提供 proxies 参数来配置单个请求:

import requests

proxies = {
  "http": "http://10.10.1.10:3128",
  "https": "http://10.10.1.10:1080",
}

requests.get("http://example.org", proxies=proxies)

你也可以通过环境变量 HTTP_PROXY 和 HTTPS_PROXY 来配置代理。

$ export HTTP_PROXY="http://10.10.1.10:3128"
$ export HTTPS_PROXY="http://10.10.1.10:1080"

$ python
>>> import requests
>>> requests.get("http://example.org")

若你的代理需要使用HTTP Basic Auth,可以使用 http://user:password@host/ 语法:

proxies = {
    "http": "http://user:pass@10.10.1.10:3128/",
}

要为某个特定的连接方式或者主机设置代理,使用 scheme://hostname 作为 key, 它会针对指定的主机和连接方式进行匹配。

proxies = {'http://10.20.1.128': 'http://10.10.1.10:5323'}

注意,代理 URL 必须包含连接方式。

下面看一个例子,接着上文提到的高匿代理,我们获取该网站第一页上可用的IP和端口,下面的代码段把它放在了一个单独的模块中,命名为: 'proxyip',接着我们调用该模块可以直接获取到可用的10个代理ip,具体的网页爬取过程和代码介绍可以参看这里:点击打开链接

import requests
from bs4 import BeautifulSoup
import re
import os.path

user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5)'
headers = {'User-Agent': user_agent}

def getListProxies():
    session = requests.session()
    page = session.get("http://www.xicidaili.com/nn", headers=headers)
    soup = BeautifulSoup(page.text, 'lxml')

    proxyList = []
    taglist = soup.find_all('tr', attrs={'class': re.compile("(odd)|()")})
    for trtag in taglist:
        tdlist = trtag.find_all('td')
        proxy = {'http': tdlist[1].string + ':' + tdlist[2].string,
                 'https': tdlist[1].string + ':' + tdlist[2].string}
        url = "http://ip.chinaz.com/getip.aspx"  #用来测试IP是否可用的url
        try:
            response = session.get(url, proxies=proxy, timeout=5)
            proxyList.append(proxy)
            if(len(proxyList) == 10):
                break
        except Exception, e:
            continue

    return proxyList

然后是通过代理来爬取知乎图片,只需修改上文代码中的 DownloadImgAndWriteToFile 类即可,代码如下:

import proxyip

class DownloadImgAndWriteToFile(Thread):
    def run(self):
        proxies = proxyip.getListProxies()
        proxy = proxies[0]  #第一个最好设置为自己的本地IP,速度会快一些
        print proxy
        nameNumber = 0
        ipIndex = 1
        global queue
        while isRun:
            image = queue.get()
            queue.task_done()
            suffixNum = image.rfind('.')
            suffix = image[suffixNum:]
            fileName = filePath + os.sep + str(nameNumber) + suffix
            nameNumber += 1
            try:
                # 设置超时重试次数及超时时间单位秒
                session.mount(image, HTTPAdapter(max_retries=3))
                response = session.get(image, proxies=proxy, timeout=20)
                contents = response.content
                with open(fileName, "wb") as pic:
                    pic.write(contents)

            except requests.exceptions.ConnectionError:
                print '连接超时,URL: ', image
                if ipIndex < 10 :
                    proxy = proxies[ipIndex]
                    print '新IP:Port', proxy
                    ipIndex += 1
            except IOError:
                print 'Io error'
        print '图片下载完毕'

注意:这里获取到的IP的下载速度贼慢,本文主要是简单讲解一下requests代理的使用,所以自己用的时候还请换些个快点的IP。

版权声明:本文为博主原创文章,转载时请加上原文链接。

相关文章推荐

爬虫ip代理服务器的简要思路

爬虫有的时候会遇到被禁ip的情况,这个时候你可以找一下代理网站,抓取一下ip,来进行动态的轮询就没问题了,也可以用别人做好的第三方ip代理平台,比如说crawlera,crawlera是一个利用代理I...

Python爬虫技巧---设置代理IP

Python爬虫技巧之设置代理IP 在学习Python爬虫的时候,经常会遇见所要爬取的网站采取了反爬取技术,高强度、高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网...

Python3网络爬虫(四):使用User Agent和代理IP隐藏身份

运行平台:Windows Python版本:Python3.x IDE:Sublime text3

Python2.*爬虫获取免费有效IP代理

爬虫代理的获取代码获取网站免费的代理IP
  • idKevin
  • idKevin
  • 2017年07月18日 14:33
  • 1899

关于网络爬虫及ip代理服务的理解

最近刚刚了解网络爬虫,之前对于此技术只是听说用来抓取网络上的各种资源,而且网络爬虫已经出现很久了,至于现在有没有什么更好的技术出现小白就不清楚了。小白刚进坑请大神们多多指教。下面是我对网络爬虫的浅显认...

python3获取免费代理IP

需要代理IP的,拿过去直接可以用。如果这个觉得这个代理网站的ip太少,可以自行添加子类实现相应方法即可...

【Python脚本】-Python查找可用代理IP

在用Python爬虫时,我们有时会用到IP代理。无意中发现一个免费代理IP的网站:http://www.xicidaili.com/nn/。但是,发现很多IP都用不了。故用Python写了个脚本,该脚...

scrapy: 使用HTTP代理绕过网站反爬虫机制

https://github.com/kohn/HttpProxyMiddleware https://github.com/cocoakekeyu/autoproxy http://blog.cs...

java代理实现爬取代理IP

使用java编写的,获取代理IP的java类,依赖很简单,就是jsoup和fastjson,直接运行main方法即可,易于嵌套到项目中使用...

python中requests使用代理proxies

学习网络爬虫难免遇到使用代理的情况,下面介绍一下如何使用requests设置代理: 如果需要使用代理,你可以通过为任意请求方法提供 proxies 参数来配置单个请求: import requ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python爬虫设置代理IP爬取知乎图片
举报原因:
原因补充:

(最多只允许输入30个字)