Python爬虫设置代理IP爬取知乎图片
来源:互联网 发布:国家去库存政策 知乎 编辑:程序博客网 时间:2024/04/28 02:51
本文接着前面两文中提到的内容来继续完善我们的Python爬虫。上文地址:通过Python爬虫爬取知乎某个问题下的图片
设置代理的方式很简单,可以看看这里Requests的官方文档,这里也有对应的中文版介绍,点击打开链接
先简单说下requests代理的使用,摘自上述提到的文档:
如果需要使用代理,你可以通过为任意请求方法提供 proxies
参数来配置单个请求:
你也可以通过环境变量 HTTP_PROXY
和 HTTPS_PROXY
来配置代理。
若你的代理需要使用HTTP Basic Auth,可以使用 http://user:password@host/ 语法:
要为某个特定的连接方式或者主机设置代理,使用 scheme://hostname 作为 key, 它会针对指定的主机和连接方式进行匹配。
注意,代理 URL 必须包含连接方式。
下面看一个例子,接着上文提到的高匿代理,我们获取该网站第一页上可用的IP和端口,下面的代码段把它放在了一个单独的模块中,命名为: 'proxyip',接着我们调用该模块可以直接获取到可用的10个代理ip,具体的网页爬取过程和代码介绍可以参看这里:点击打开链接
import requestsfrom bs4 import BeautifulSoupimport reimport os.pathuser_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 proxyipclass 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。
1 0
- Python爬虫设置代理IP爬取知乎图片
- python设置代理ip爬取知乎图片
- Python爬虫技巧---设置代理IP
- selenium+python设置爬虫代理IP
- 爬虫代理ip设置
- 爬虫代理ip设置
- Python 爬虫IP代理
- python IP代理爬虫,download 代理IP
- python 爬虫获取代理Ip
- 浅谈Python爬虫代理设置
- 详谈Python爬虫代理设置
- python 爬虫 批量获取代理ip
- python爬虫代理IP池(proxy pool)
- Python爬虫设置代理IP和伪装成浏览器的方法
- 【python 爬虫】selenium爬虫模块 phantomjs如何加代理IP
- 爬虫代理IP
- 爬虫 IP代理策略
- Python爬虫抓取代理IP并检验可用性
- 手动把web项目部署到tomcat
- POJ 1101 解题报告
- 《七周七Web开发框架》读后感
- 跨站点请求伪造
- Struts2工具类[实现获取Request/Response/Session与绕过jsp/freemaker直接输出文本的简化函数]
- Python爬虫设置代理IP爬取知乎图片
- 冒泡排序
- 基于ftp实现一个类dropbox文件同步程序
- 简单工厂模式
- 布隆过滤器(Bloom Filter)详解
- 快速幂 jobdu-1447
- python下载安装
- dotnet 你不得不晓得的一个编译开发工具
- java调.py文件指南