首先介绍一下爬虫为什么要使用代理IP

在爬虫的过程中,我们经常会遇见很多网站采取了防爬取技术,或者说因为自己采集网站信息的强度和采集速度太大,给对方服务器带去了太多的压力。
如果你一直用同一个代理ip爬取这个网页,很有可能ip会被禁止访问网页,所以基本上做爬虫的都躲不过去ip的问题。
所以我们在爬取网页内容的过程中需要使用代理ip,在这里介绍一种获取代理ip方式,从西刺网站获取代理ip。

具体获取步骤如下

使用方式:将需要获取页数传入主函数即可。
在这里使用的是requests方式获取网页内容,使用BeautifulSoup提取网页内容。并将提取到的代理ip分类保存到txt文件中。

1、导包

import requests
import chardet
import random
import time
from bs4 import BeautifulSoup
from telnetlib import Telnet
import progressbar

2、 准备浏览器头部

说明一下,使用requests获取西刺网页代码的时候需要设置浏览器头部否则获取不到网页内容。

  user_agent = ["Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)","Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)","Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)","Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)","Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)","Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)","Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1","Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0","Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5","Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20","Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52"
]

3、定义获取网页代码函数

def getHtmlWithHeader(url):# 尝试获取网页内容,当获取失败的时候重新获取网页代码# 当失败次数过多时停止获取 并输出提示信息try:# 获取响应内容response = requests.get(url,headers={"User-Agent": random.choice(user_agent)})# 获取编码code = chardet.detect(response.content)["encoding"]# 指定编码response.encoding = code# 输出文本# print(response.text)return response.textexcept:time.sleep(1)global _times_count_times_count += 1if _times_count > 5:print("ip获取失败,请稍后重试")returnprint("第", _times_count, "次尝试抓取")return getHtmlWithHeader(url)

4、从获取到的网页代码中提取代理IP

def getIP(num):# 准备数据列表datalist = []# 准备 urlfor num1 in range(num):url = 'http://www.xicidaili.com/nn/' + str(num1 + 1)# 获取返回数据html = getHtmlWithHeader(url)soup = BeautifulSoup(html, 'html.parser')parent = soup.find(id="ip_list")lis = parent.find_all('tr')# 删除第一条数据lis.pop(0)print("爬取ip地址及相关信息")for i in lis:ip = i.find_all('td')[1].get_text()dk = i.find_all('td')[2].get_text()nm = i.find_all('td')[4].get_text()ty = i.find_all('td')[5].get_text()tm = i.find_all('td')[8].get_text()datalist.append((ip, dk, nm, ty, tm))print("共爬取到", len(datalist), "条数据\n")# 将获取到的数据返回return datalist

5、过滤代理IP,将生存时间短的以及不可用的IP过滤掉

def filtrateIP(datalist):datalist1 = []# 对生存时间短的数据进行过滤print('过滤存活时间短的\n')for i in datalist:if "分钟" not in i[4]:datalist1.append(i)# print(i)print("共过滤掉", len(datalist) - len(datalist1), "条生存时间短的数据")print("还剩", len(datalist1), "条数据\n")# 对得到的数据进行测试,看是否可用print('测试不可用的ip并将其过滤')datalist.clear()v = 1p = progressbar.ProgressBar()for i in p(datalist1):# print("正在检测第"+str(v)+"条数据")v += 1try:Telnet(i[0], i[1], timeout=1)except:passelse:datalist.append(i)print('过滤不可用的ip')print("共过滤掉", len(datalist1) - len(datalist), "条不可用数据")print("还剩", len(datalist), "条数据")# 将过滤后的数据返回return datalist

6、将过滤后的ip按HTTP/HTTPS分类并保存

def saveIP(datalist):# 对得到的数据进行分类 http/httpshttplist = []httpslist = []for i in datalist:if i[3] == 'HTTP':httplist.append('http://' + i[0] + ':' + i[1])else:httpslist.append('https://' + i[0] + ':' + i[1])# 将显示结果显示到屏幕上print("HTTP共" + str(len(httplist)) + "条数据")print(httplist)print("")print("HTTPS共" + str(len(httpslist)) + "条数据")print(httpslist)print("")print("写入文件")# 打开文件f = open('ip地址.txt', 'w', encoding="utf-8")# 写入文件f.write("HTTP\n")f.write(str(httplist) + "\n\n")f.write("HTTPS\n")f.write(str(httpslist))# 关闭文件f.close()

7、最后调用这些函数即可

# num 为爬取的页数
def main(num):datalist = getIP(num)IPlist = filtrateIP(datalist )saveIP(IPlist)if __name__ == '__main__':main(1)

Python爬虫 西刺代理IP的获取 代理IP相关推荐

  1. Python爬虫技巧一之设置ADSL拨号服务器代理

    Python爬虫技巧一之设置ADSL拨号服务器代理 https://zhuanlan.zhihu.com/p/25286144

  2. 使用淘宝IP库获取用户ip地理位置

    为什么80%的码农都做不了架构师?>>>    以前用过GOOGLE地图和百度地图获取过用户地理位置,现在又多了一个方法,那就是使用淘宝IP库获取用户ip地理位置,一起来看代码吧. ...

  3. 根据IP地址获取真实IP所在地区 ,使用纯真IP库(纯真版20160215)

     package com.alpha.util; import java.io.ByteArrayOutputStream; import java.io.IOException; import ...

  4. python爬虫日志(9)爬取代理

    2019独角兽企业重金招聘Python工程师标准>>> 话不多说,直接上代码,很简单,很容易看懂 import requests from bs4 import BeautifulS ...

  5. Python爬虫攻略(1)使用Requests获取LOL游戏攻略

    申明:本文对爬取的数据仅做学习使用,不涉及任何商业活动,侵删 Python爬虫教程>1 使用Requests获取LOL游戏攻略 前戏 如果你想先了解一下什么是爬虫, 建议看一下这篇文章:学习爬虫 ...

  6. 论X-Forwarded-For伪装代理请求与获取真实ip(springboot项目)

    以下项目均是基于springboot2.x构建 1.使用X-Forwarded-For 伪装代理 之前做了一个项目,关于xxx抢购,当时是用spring boot做的,主要功能就是实现模拟真实用户登录 ...

  7. python爬虫我要个性网,获取头像

    python爬虫学习 提前声明:请勿他用,仅限个人学习 运用模块有 import requests import re import os 较为常规,适合网络小白.lxml和bs4也是基础.长话短说. ...

  8. 【快代理API】获取订单IP提取余额

    接口描述 https://dps.kdlapi.com/api/getdpsvalidtime 接口地址 获取订单IP提取余额 此接口只对按量付费订单和包年包月的集中提取型订单有效 对于按量付费订单, ...

  9. 服务器搭建网站公网ip,如何获取公网ip,自己搭建公网ip服务器的方法

    #Go语言初体验 – 获取公网IP小服务.由于免费的动态dns刷新IP很慢, 手动实时获取办公室网络公网IP. #GetIp.go 是服务端程序, 用于返回当前访问的请求的公网IP. demo地址: ...

  10. Java获取(外网)网络IP和本机真实IP Java获取真实IP Java获取真实ip Java获取本机ip Java获取 本机真实ip

    /*** IP地址相关工具类*/ public class IpUtil {private static final Logger logger = LoggerFactory.getLogger(I ...

最新文章

  1. Runtime-消息发送和消息转发
  2. C# SignalR 即时通讯 聊天室
  3. 子元素超出了父元素的高度_T恤定制融入中国元素,美出新高度
  4. 聊聊spring tx的EnableTransactionManagement
  5. 慎用Hyper-Threading Technology
  6. 如何将c语言程序封装供python调用_C++调用python
  7. 一些html5和css3的一些常见面试题
  8. ajax显示失败信息,javascript
  9. php多图片打包下载
  10. 【Java】Jsoup爬虫快速入门案例
  11. RIP总结(转自鸿鹄论坛)
  12. java 酒店系统_Java实现酒店客房管理系统
  13. 内存颗粒性能测试软件,PC技巧分享 篇四:如何通过快速识别内存颗粒了解超频性能...
  14. Vue input 限制只能输入正整数、数字、英文、两个小数
  15. CCS编译错误:error #10099-D和error#10234-D unresolved symbols remain解决方法
  16. 浅析乡镇房地产产业现状及其对乡镇经济发展的推动力
  17. smart3d4.4.5_在Android 5.0中使用Smart Lock,再也不必在家中解锁手机
  18. 媒体报道 | 《数据安全治理自动化技术框架(DSAG)》白皮书诞生,探索数据安全治理技术“最优解”
  19. 【AI公司酷05期】美宅科技:独创人工智能室内设计引擎,帮你3秒搞定装修方案,要用AI赋能家居新零售
  20. Python几种主流框架,知道三种你就是大神,干货建议收藏

热门文章

  1. H5 video 播放器demo
  2. 白盒测试方法与黑盒测试方法简析
  3. 小超市的大梦想,京东的梦醒时分
  4. Python图片添加好看的中文字体并根据图片动态改变文字大小
  5. ubuntu 版mysql客户端工具_MySQL GUI工具
  6. linux系统下,我也用虚拟机——linux虚拟机随笔
  7. Android端公司通讯录开发与实现(一)
  8. 最优化 | 二次规划的基础知识理论 | 例题讲解
  9. 射频识别技术漫谈(25)——Felica简介
  10. python源码剖析_Python源码剖析-深度探索动态语言核心技术.陈儒.PDF版www.atcpu.com...