都什么时代了还在裸爬吗,快用IP代理池吧!

当你经常爬取对方的网站,对方看你,呦这家伙频繁访问也太快了吧,肯定是个爬爬,得把他的IP封了,看他还怎么爬!
因此,这次教你怎么伪装自己的 IP 地址别让对方轻易的就把你给封掉。
那怎么伪装呢?
那接下来就是学习Python的正确姿势了!

其实对于Python来说,使用代理代理IP访问是很简单的。就拿我们经常使用的requests库来说,使用代理IP如下:

import requests#定义代理IP
proxie = {'http' : 'http://xx.xxx.xxx.xxx:xxxx','http' : 'http://xxx.xx.xx.xxx:xxx',....
}#使用代理IP
response = requests.get(url,proxies=proxies)

这样你就能使用代理IP去访问网站了,当然了,你会问我代理IP在哪?哪里来?
在网上有很多的免费的代理IP,一搜就是一大堆。
当然了你也知道,既然是免费的,肯定也有很多人去使用,而且也不稳定。
如果你有钱的话,市面上有人就专门提供代理IP的直接去买就行了。(真有钱,真是的爬个虫也得这样,也带带我~)

当然了我们的重点就是白嫖,不花钱了。
那么接下来就是重点了,开始真正的学习Python正确姿势了!

不想花钱?那我们可以搞个IP代理池!
道理呢大家都懂:
主要就是通过 python 程序去抓取网上大量免费的代理 ip ,然后定时的去检测这些 ip 可不可以用,那么下次你要使用代理 ip 的时候,你只需要去自己的 ip 代理池里面拿就行了。

现在的你是不是心痒痒的也想弄一个代理池了,当然了你也得有这个水平。哈哈

所以我现在推荐一个不错的开源的IP代理池

https://github.com/Python3WebSpider/ProxyPool

然后将它下载到本地就好。
接下来如果你需要配置一些相关信息,可以到它的proxypool目录下的setting.py里设置,比如Redis 的地址密码相关。
如果你没有Redis,那么你得快去下载了。这是必须需要的。下载地址请看下面:

https://github.com/MicrosoftArchive/redis/releases

前提Redis 安装完后,进行以下步骤

然后接下来找到你下载好的IP代理池文件夹,

第一步:安装上依赖包
pip install -r requirements.txt

步骤如下:
Shift+鼠标右键,选Windows PowerShell 窗口,然后在命令行输入命令。
在这里插入图片描述

第二步,运行run.py

步骤,直接在Windows PS窗口进行运行,
输入命令python run.py
在这里插入图片描述
项目跑起来后,不要关闭该窗口,然后接下来你就可以访问你的ip代理池了。

比如随机获取一个代理 ip 地址

http://localhost:5555/random

这样访问可以随机获取一个代理ip。

有了这样的条件,在代码中也不难实现:

import requestsPROXY_POOL_URL = 'http://localhost:5555/random'def get_proxy():try:response = requests.get(PROXY_POOL_URL)if response.status_code == 200:return response.text  # 如果该代理ip可用,返回该代理ipexcept ConnectionError:return None

这样我们就成功的在我们的代理池中获取代理 ip 了,那么下次谁还敢封你ip,你就拿出你的代理ip,继续爬,嘿嘿~

下面我给大家一个简单的实例来展现一下秀操作了.
通过代理ip来爬取京东的商品图片:
在这里插入图片描述
源代码如下:

import re
import os
from urllib import request
import requestsPROXY_POOL_URL = 'http://localhost:5555/random'def get_proxy():try:response = requests.get(PROXY_POOL_URL)if response.status_code == 200:return response.textexcept ConnectionError:return Noneheaders = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) ''AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/63.0.3239.132 Safari/537.36','upgrade-insecure-requests': '1',
}def gethtml(url):proxy = get_proxy()proxies = {'http': 'http://' + proxy}response = requests.get(url, headers = headers, proxies=proxies)html = response.textreturn htmldef geturllist(html):pattern = re.compile(r'data-lazy-img="//(.+?\.jpg)"',re.M)imglist = re.findall(pattern, html)return imglistdef downloadimgs(urllist):if not os.path.exists('pictures'):os.mkdir('pictures')x=1print('开始下载,共{count}张图片。'.format(count=len(urllist)))for imgurl in urllist:print('第{count}张图片。'.format(count=x))imgurl = "http://" + imgurlrequest.urlretrieve(imgurl,os.path.join('pictures','{num}.jpg'.format(num=x)))x+=1print('下载完成!')
if __name__=='__main__':url = 'https://search.jd.com/Search?keyword=cpu&enc=utf-8&wq=cpu&pvid=2fc2be2e40ba471399e67b5bbb0b82f2'html=gethtml(url)urllist=geturllist(html)downloadimgs(urllist)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部