[使用案例]怎么使用ip代理来爬虫Python?

发布时间:2020-05-29 关注热度:°C

  你可能会觉得怎么爬虫那么复杂,经常IP就被网站封了,还得去找ip代理来使用才可以继续爬虫。这是由于网站对于自己服务器以及信息的一种保护。

  Python爬虫要经历爬虫、爬虫被限制、爬虫反限制的过程。当然后续还要网页爬虫限制优化,爬虫再反限制的一系列道高一尺魔高一丈的过程。爬虫的初级阶段,添加headers和ip代理可以解决很多问题。

Python怎么抓取ip代理来爬虫

  下面我们跟着IP海,来看看Python抓取ip代理的具体代码操作:

  运行环境:

  Python 3.7, Pycharm

  这些需要大家直接去搭建好环境...

  准备工作:

  爬取IP地址的网站(国内高匿代理)

  爬取IP的完整代码:

  PS:简单的使用bs4获取IP和端口号,没有啥难度,里面增加了一个过滤不可用IP的逻辑,以下关键地方都有注释了。

  #!/usr/bin/env python3

  # -*- coding: utf-8 -*-

  # @Time : 2018/11/22

  # @Author : liangk

  # @Site :

  # @File : auto_archive_ios.py

  # @Software: PyCharm

  import requests

  from bs4 import BeautifulSoup

  import json

  class GetIp(object):

  """抓取ip代理"""

  def __init__(self):

  """初始化变量"""

  self.url = 'http://www.xicidaili.com/nn/'

  self.check_url = 'https://www.ip.cn/'

  self.ip_list = []

  @staticmethod

  def get_html(url):

  """请求html页面信息"""

  header = {

  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36' }

  try:

  request = requests.get(url=url, headers=header)

  request.encoding = 'utf-8'

  html = request.text

  return html

  except Exception as e:

  return ''

  def get_available_ip(self, ip_address, ip_port):

  """检测IP地址是否可用"""

  header = {

  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36' }

  ip_url_next = '://' + ip_address + ':' + ip_port

  proxies = {'http': 'http' + ip_url_next, 'https': 'https' + ip_url_next}

  try:

  r = requests.get(self.check_url, headers=header, proxies=proxies, timeout=3)

  html = r.text

  except:

  print('fail-%s' % ip_address)

  else:

  print('success-%s' % ip_address)

  soup = BeautifulSoup(html, 'lxml')

  div = soup.find(class_='well')

  if div:

  print(div.text)

  ip_info = {'address': ip_address, 'port': ip_port}

  self.ip_list.append(ip_info)

  def main(self):

  """主方法"""

  web_html = self.get_html(self.url)

  soup = BeautifulSoup(web_html, 'lxml')

  ip_list = soup.find(id='ip_list').find_all('tr')

  for ip_info in ip_list:

  td_list = ip_info.find_all('td')

  if len(td_list) > 0:

  ip_address = td_list[1].text

  ip_port = td_list[2].text

  # 检测IP地址是否有效

  self.get_available_ip(ip_address, ip_port)

  # 写入有效文件

  with open('ip.txt', 'w') as file:

  json.dump(self.ip_list, file)

  print(self.ip_list)

  # 程序主入口

  if __name__ == '__main__':

  get_ip = GetIp()

  get_ip.main()

  当然了,以上这些只是用ip代理爬虫的常规操作,爬虫大神可能已经对于这些已经见怪不怪了。大家如果需要选择好用不贵的爬虫ip代理,欢迎咨询IP海。

 

版权声明:本文为IP海(iphai.cn)原创作品,未经许可,禁止转载!

Copyright © www.iphai.cn. All Rights Reserved. IP海 版权所有.
IP海仅提供中国内IP加速服务,无法跨境联网,用户应遵守《服务条款》内容,严禁用户使用IP海从事任何违法犯罪行为。
ICP备案鄂ICP备19030659号-3 公安备案鄂公网安备42100302000141号 计算机软件著作权证计算机软件著作权证 ICP/EDI许可证ICP/EDI许可证:鄂B2-20200106

微信扫一扫咨询