1.获取免费代理ip

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@author: liuyc
@file: crawl_xici_ip.py
@time: 2017/8/21 23:22
@describe:
"""
import requests
from scrapy.selector import Selector
from fake_useragent import UserAgent
import MySQLdbconn = MySQLdb.connect(host="127.0.0.1", user="root", password="pass", db="scrapy", charset="utf8")
cursor = conn.cursor()
ua = UserAgent()def crawl_xici_ips():headers = {"User-Agent": "{0}".format(ua.random)}for i in range(1, 3):req = requests.get("http://www.xicidaili.com/nn/{0}".format(i), headers=headers)selector = Selector(text=req.text)trs = selector.css("#ip_list tr")lst_ip = []for tr in trs[1:]:all_text = tr.css("td::text").extract()lst_ip.append({"ip": all_text[0], 'port': all_text[1], 'ip_type': all_text[5]})for ip_info in lst_ip:sql_insert = "INSERT INTO ip_proxy(ip, port, ip_type) VALUES ('{0}','{1}','{2}')".format(ip_info["ip"], ip_info["port"], ip_info["ip_type"])cursor.execute(sql_insert)conn.commit()# crawl_xici_ips()class GetIP(object):def get_random_ip(self):random_sql = "SELECT ip, port FROM ip_proxy ORDER BY RAND() LIMIT 1"cursor.execute(random_sql)for ip_info in cursor.fetchall():ip = ip_info[0]port = ip_info[1]judge_re = self.judge_ip(ip, port)if judge_re:return "http://{0}:{1}".format(ip, port)else:return self.get_random_ip()def del_ip(self, ip):# 从数据库中删除无效ipdel_sql = "DELETE FROM ip_proxy WHERE ip='{0}'".format(ip)try:cursor.execute(del_sql)conn.commit()except Exception as e:print(e)def judge_ip(self, ip, port):baidu_rul = "http://www.baidu.com"proxy_url = "http://{0}:{1}".format(ip, port)proxy_dict = {"http": proxy_url,}try:response = requests.get(baidu_rul, proxies=proxy_dict)except Exception as e:print(e)self.del_ip(ip)print("invalid ip or port")return Falseelse:code = response.status_codeif code >= 200 and code < 300:print("effective ip:{0}".format(ip))return Trueelse:print("invalid ip or port")self.del_ip(ip)return False
#
# if __name__ == "__main__":
#     get_ip_obj = GetIP()
#     get_ip_obj.get_random_ip()

2.在抓取网页时通过下面的中间件 随机更换免费代理IP

class RandomProxyMiddleware(object):"""随机免费代理ip中间件"""def process_request(self, request, spider):print("RandomUserAgentMiddleware".center(20, "*"))get_ip_obj = GetIP()request.meta["proxy"] = get_ip_obj.get_random_ip()

第四章 爬取西刺免费代理ip 并应用到scrapy相关推荐

  1. Python 爬取西刺可用代理IP,自带检测。

    功能: 爬取西刺代理IP 添加了自动检测IP是否可用功能 输出到Data.txt文件中 注意: 爬取西刺的时候,有可能真实IP被封,可以先尝试爬取少量的代理IP,放入ip_use中. 测试: 1.测试 ...

  2. 爬取西刺网代理ip,并把其存放mysql数据库

    需求: 获取西刺网代理ip信息,包括ip地址.端口号.ip类型 西刺网:http://www.xicidaili.com/nn/ 那,如何解决这个问题? 分析页面结构和url设计得知: 数据都在本页面 ...

  3. 爬取西刺网代理IP并检验保存

    准备把以前写过的小爬虫慢慢贴出来,抱歉还没怎么去改~ 最后可用的IP保存在运行目录下的ip_ues.txt中. #encoding:utf8 #author : buracag_mc import u ...

  4. 爬取西刺网实现ip代理池

    使用ip代理服务器可以防止在爬虫时被封本机ip.国内免费的高匿代理可以选择西刺网 总体目标是写一个爬虫,将这些字段保存在数据库中,然后筛选速度快的作为代理服务器,实现ip代理池. 在这里使用reque ...

  5. python 爬取西刺ip代理池

    1. 如何在requests中设置ip代理 最直接的用法,在get中添加proxies设置ip代理 proxies = {'https': 'http://183.148.153.147:9999/' ...

  6. 【Python爬虫建立IP池错误】爬取西刺网出现的各种问题

    本想爬取一个网站,但由于访问次数多了,遭服务器拒绝.后面就行通过建立一个IP池,当然就想爬取西刺网上的IP.所以就在网上copy了一份代码,但很不幸的是不管怎么弄都无法运行.所以我开始简化代码,从爬取 ...

  7. 爬取西刺网的免费IP

    在写爬虫时,经常需要切换IP,所以很有必要自已在数据维护库中维护一个IP池,这样,就可以在需用的时候随机切换IP,我的方法是爬取西刺网的免费IP,存入数据库中,然后在scrapy 工程中加入tools ...

  8. Python 多线程爬取西刺代理

    西刺代理是一个国内IP代理,由于代理倒闭了,所以我就把原来的代码放出来供大家学习吧. 镜像地址:https://www.blib.cn/url/xcdl.html 首先找到所有的tr标签,与class ...

  9. Python爬取西刺代理网页

    爬取西刺代理网页的信息,并保存到本地的TXT文本或者mysql数据库中 本文只做爬取网页的练习 代码如下: import requests from lxml import etree import ...

  10. python之利用requests库爬取西刺代理,并检验IP的活性

    用爬虫爬取某个网站的数据时,如果用一个IP频繁的向该网站请求大量数据,那么你的ip就可能会被该网站拉入黑名单,导致你不能访问该网站,这个时候就需要用到IP动态代理,即让爬虫爬取一定数据后更换IP来继续 ...

最新文章

  1. 左神算法:二叉树的最大 / 最小深度(普通+Morris遍历进阶)(Java版)
  2. 20150728月度会议
  3. Amazon Seller Central is Temporarily Unavailable
  4. 贪心法——部分背包问题
  5. 在logback、log4j等日志输出工具中输出java异常调用堆栈
  6. MyBatis_Generator的使用(实践)
  7. 使用卡方分箱进行数据离散化-python实现
  8. verilog教程——initial语句和always语句
  9. 微型计算机原理与接口技术朱金钧课后答案,微型计算机原理及应用技术 第3版...
  10. 军棋java_军棋规则及走法
  11. 百度富文本编辑器UEditor增加自定义字体
  12. edp和lvds区别在哪里 [转载]
  13. 光场相机微透镜阵列排布方式以及其填充率比较
  14. 笔记连载 | Day15【按键检测、按键消抖】 【原理及verilog仿真】篇
  15. NaN == NaN 的结果是什么?
  16. 如何撰写专利技术交底书?交底书中有哪些坑?
  17. SOEM 源码解析 ecx_FRMW
  18. Chrome浏览器怎么保存整个网页为图片
  19. esp32cam应用一 点亮我的TFT小屏幕
  20. 艾兰岛编辑器-无法通过的屏障

热门文章

  1. codematic2连接mysql失败_动软代码生成器Codematic
  2. 在Linux下群ping脚本,Linux下使用screen和ping命令对网络质量进行监控
  3. 基于FPGA VHDL 的 ASK调制与解调设计(附源码)
  4. 21天学通C语言-学习笔记(12)
  5. 图的存储结构-十字链表
  6. SVPWM算法理解(一)——基本原理
  7. 批量一键删除QQ空间说说软件
  8. FileUtils常用方法 - commons-io常用工具类
  9. h5前端 调用手机通讯录
  10. 千峰python资料下载_千锋Python基础视频教程全集下载