400-998-9776转2 服务时间:周一至周日 9:00-23:00 注意:本站不提供境外服务本站不提供境外服务

返回

Python怎么抓取代理IP来爬虫?

发布时间:2019-11-25 14:37:34 来源:IP精灵

  你可能会觉得怎么爬虫那么复杂,动不动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精灵。