爬虫代理设置--爬取ip池、验证ip是否可用、验证代理ip是否能用

昨天在爬取大众点评的时候,刚开始还好好的,但一会就把我的ip给封啦,所以我就想给自己弄一个ip池,这样我就可以继续爬啦。网上找了一堆代码,发现好多都是python2的,它们请求使用urllib2的库,这个库在python3中合并成urllib,所以很多方法调用都出现错误,所以我还是决定用requests。

一、获得代理ip


  
  
  1. def get_ip_list(obj):
  2. ip_text = obj.findAll( 'tr', { 'class': 'odd'}) # 获取带有IP地址的表格的所有行
  3. ip_list = []
  4. for i in range(len(ip_text)):
  5. ip_tag = ip_text[i].findAll( 'td')
  6. ip_port = ip_tag[ 1].get_text() + ':' + ip_tag[ 2].get_text() # 提取出IP地址和端口号
  7. ip_list.append(ip_port)
  8. print( "共收集到了{}个代理IP".format(len(ip_list)))
  9. print(ip_list)
  10. return ip_list
  11. url = 'http://www.xicidaili.com/'
  12. headers = {
  13. 'User-Agent': 'User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36'}
  14. request = Request(url, headers=headers)
  15. response = urlopen(request)
  16. bsObj = BeautifulSoup(response, 'lxml') # 解析获取到的html
  17. lists=get_ip_list(bsObj)

二、验证是否可用


  
  
  1. def valVer(proxys):
  2. badNum = 0
  3. goodNum = 0
  4. good=[]
  5. for proxy in proxys:
  6. try:
  7. proxy_host = proxy
  8. protocol = 'https' if 'https' in proxy_host else 'http'
  9. proxies = {protocol: proxy_host}
  10. response = requests.get( 'http://www.baidu.com', proxies=proxies, timeout= 2)
  11. if response.status_code != 200:
  12. badNum += 1
  13. print (proxy_host, 'bad proxy')
  14. else:
  15. goodNum += 1
  16. good.append(proxies)
  17. print (proxy_host, 'success proxy')
  18. except Exception as e:
  19. print( e)
  20. # print proxy_host, 'bad proxy'
  21. badNum += 1
  22. continue
  23. print ( 'success proxy num : ', goodNum)
  24. print( 'bad proxy num : ', badNum)
  25. return good

三、检查代理ip是否可用


  
  
  1. res =requests.get( 'http://icanhazip.com/', proxies=go[ 0])
  2. print (res.content)

注:我在找资料的时候我发现一个库fake_useragent,这个库可以伪装请求头,具体用法


  
  
  1. from fake_useragent import UserAgent
  2. ua = UserAgent()
  3. #ie浏览器的user agent
  4. print(ua.ie)
  5. #opera浏览器
  6. print(ua.opera)
  7. #chrome浏览器
  8. print(ua.chrome)
  9. #firefox浏览器
  10. print(ua.firefox)
  11. #safri浏览器
  12. print(ua.safari)
  13. #最常用的方式
  14. #写爬虫最实用的是可以随意变换headers,一定要有随机性。支持随机生成请求头
  15. print(ua.random)
  16. print(ua.random)
  17. print(ua.random)
这样就可以伪装自己。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值