事由

        前段时间搞爬虫项目,为了避免本地IP给锁掉,尝试了使用代理池,但貌似免费代理IP很多用不了,就很尴尬。刚好手头有一台云服务器,计划着搭建个代理IP,以便于在python中的requests库中使用proxies代理IP访问。正常的Python requests爬虫语法结构大致如下:

import requests
response=requests.get("http://www.baidu",proxies={"http://IP地址:端口号"})
print(response.status_code)	// 查看响应状态

        proxies这个参数是可以省略的(默认使用本地IP去访问网站),也就说,搭建好的代理IP或者代理池IP都可以添加到proxies参数中,将模拟使用该IP访问所需要爬取的网站,避免本地IP因访问过多而泄露隐私或被封锁IP。

        Windows系统上常用的代理服务器搭建工具有Apache和ccproxy,前者是免费的,后者付费但有图形化界面。这里只做Apache24的代理IP搭建。(ccproxy我没能跑起来啊啊啊)因为IP隐私问题,我将使用虚拟机来复刻一遍搭建的过程,使用到的系统镜像是Windows Server 2012 R2。(镜像分享-百度云盘)

一、下载Apache24

        阿帕奇官网可以下载到所需要的版本(Apache官网),打开该网址后,选择网页左上角的“Download!”;打开新页面后找到“Files for Microsoft Windows”;点击进入到“Downloading Apache for Windows”中选择“ApacheHaus”;在“Apache 2.4 Server Binaries”列表下找到自己心仪的版本,再点击版本号对应的“Dowload Locations”下的图标:,浏览器就会自动匹配合适的Apache配置文件压缩包。(本段落中蓝字部分可以直接跳转到对应页面的,但还是建议一步一步来,需要匹配系统识别)图示如下:

 二、配置环境

        接下来就是最关键的配置问题,涉及到防火墙、阿帕奇配置文件的修改及端口号开放问题。   

1.解压文件包

        先把上一步下载好的zip压缩包内的文件解压到自己喜欢的位置,我这里是直接放在桌面了,只要能记得住 Apache24 这个文件夹位置就行。

2.关闭防火墙        

        打开Windows系统下的cmd命令行,输入“net stop mpssvc”再回车,关闭防火墙后,输入“ipconfig”查看本机的IPv4地址,记下来就行。

3.修改httpd.conf

        在 Apache24 文件夹下打开 conf 文件夹,就能找到 httpd.conf 这个配置文件了。通过修改该文件内的内容来实现代理IP的搭建。

         鼠标右键 httpd.conf ,打开方式,用记事本编辑。 

        修改 Define SRVROOT " " 内容,在双引号内加入Apache24 文件夹路径(路径用的斜杠号是"/"而不是"\");Listen加上IPv4地址和8088端口作为代理开放代理(如192.168.121.140:8088);手动删除配置文件前的#号,启动代理服务的so文件(proxy相关服务和mod_slotmem_shm.so);在文件末尾添加以下内容:

ProxyRequests On

<Proxy *>

         Require all granted

</Proxy>

AllowCONNECT 8080 808

具体内容:

  

三、启动代理服务

        打开cmd后cd进入到 Apache24 目录下的 bin ,启动httpd.exe,第一次使用这个文件需要输入“httpd.exe -k install”。

cd C:\User\Administrator\Desktop\Apache24\bin
(httpd.exe -k install)
httpd.exe -k start

         正常出现上图这样,小卡一下然后跳下一行,就是代理服务已经启动好了。如果要关闭代理IP,可以用“httpd.exe -k stop”,如下图:

        接下来就可以,使用该IP地址所绑定的代理端口,尝试进行网络爬虫。

四、爬虫实践-代理IP效果

        简单访问一下百度,看看能不能返回状态码。Python的代码(requests库)如下:

import requests


def load_page(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (compatible; MSIE 9.0;"
                      "Windows NT 6.1; Trident / 5.0;"
    }
    proxy_list = [
        {'http': 'http://175.178.223.138:8088'}
    ]
    # 使用代理服务器发送GET请求,接收服务器返回的响应
    # response = requests.get(url, headers=headers)
    # return response.text
    for per_ip in proxy_list.copy():
        try:
            response = requests.get(url, headers=headers, proxies=per_ip, timeout=5)
        except:
            print(f"IP地址:{per_ip['http']}无效")
            proxy_list.remove(per_ip)
        else:
            print(f"IP地址:{per_ip['http']}有效")  # 若IP有效则返回状态码
            print("状态码为:" + str(response.status_code))


if __name__ == "__main__":
    base_url = 'https://www.baidu'
    load_page(base_url)

 PS:httpd.exe -k install出现丢失VCRUNTIME140.dll问题

        在执行安装httpd.exe命令有可能会显示下图缺组件(vc运行库)的情况:

         这个并不好处理,需要直接进微软的C++文档下载对应的C++库,个人推荐的Windows Server 2012 R2 VC下载链接:Visual Studio 2012 x64,同时需要打开Windows更新(控制面版-系统和安全-Windows更新)和Microsoft.Net.Framework。(仅供参考,因为我的虚拟机也出现这种情况,但云服务器没有,跑去下载后发现还是安装不了)

        所以,有更好的解决方法,直接去下载一个vcruntime.dll,放在Windows系统中的C:\Windows\SysWOW64中,再运行一次httpd.exe -k install。如果又出现了缺某某某.dll的情况且下载不到的情况下,可以使用360管家中的dll修复。当然,可以把别人能用的一整个SysWOW64文件夹拷贝过去替换掉本地的SysWOW64(我的虚拟机遇到这个问题就是这样解决的。。。)SysWOW64文件夹分享-百度云盘(里面也有我用的vcruntime.dll)

-- THE END --

更多推荐

Windows上使用Apache24搭建代理IP服务器 动图图解(腾讯云服务器/Windows Server 2012 R2) # 谭子