Scrapy是一个用于爬取网站并提取结构化数据的应用程序框架,可用于各种有用的应用程序,例如数据挖掘,信息处理或历史档案。本文主要描述从某IP代理网站抓取内容的代码示例,免费代理IP时效性很差,仅供大家学习试用。

centos7安装Scrapy

pip install Scrapy


我本机安装时,不幸发生错误(Microsoft Visual C++ 14.0 is required),转而使用whl文件安装,下载地址【https://www.lfd.uci.edu/~gohlke/pythonlibs/】
分别下载Twisted和Scrapy,Twisted是依赖包,也需要安装。注意操作系统版本。

pip install Twisted-20.3.0-cp38-cp38-win_amd64.whl
pip install Scrapy-2.1.0-py3-none-any.whl

创建项目

scrapy startproject ipproxys


创建项目文件结构和主要文件的作用,如下:
scrapy.cfg :项目的配置文件
ipproxys/ :项目的Python模块
ipproxys/items.py :项目的目标文件,将抓取内容模型化
ipproxys/pipelines.py :项目的管道文件
ipproxys/settings.py :项目的设置文件
ipproxys/spiders/ :存储具体爬虫代码的目录

编写items.py代码

在items文件中增加目标网页对应的类,继承Item类,数据项是Field类型

class IpProxyItem(scrapy.Item):# define the fields for your item here like:ip = scrapy.Field()port = scrapy.Field()# 匿名度anons = scrapy.Field()# 类型:http/httpsschema = scrapy.Field()# 国家country = scrapy.Field()# 位置position = scrapy.Field()# 响应速度speed = scrapy.Field()# 最后验证时间verify_time = scrapy.Field()

编写爬虫代码

在spiders目录下,新建jiangxianli_spider.py并编写爬虫类文件,继承scrapy.Spider类,实现start_requests和parse两个方法。

class JxlIpSpider(scrapy.Spider):"""搜索免费代理IP地址"""#  Spider 的标识符,用于唯一标识该 Spider;在整个项目中是全局唯一的name = "free_ip"def start_requests(self):"""必须定义并返回一组可以被 Spider 爬取的 Requests,Request 对象由一个 URL 和一个回调函数构成:return:"""urls = ['https://ip.jiangxianli.com/?page=1','https://ip.jiangxianli.com/?page=2'# 'https://www.kuaidaili.com/free'  # 国内高匿IP]for url in urls:yield scrapy.Request(url=url, callback=self.parse)def parse(self, response):"""Request 对象中的回调方法,用来解析request返回的内容:param response::return:"""self.logger.info('正在爬取:< ' + response.request.url + ' >')# 按行读取数据tr_list = response.css("div.layui-form>table>tbody>tr")for tr in tr_list:# css的伪类 ::textip = tr.css('td:nth-child(1)::text').get()port = tr.css('td:nth-child(2)::text').get()anons = tr.css('td:nth-child(3)::text').get()schema = tr.css('td:nth-child(4)::text').get()position = tr.css('td:nth-child(5)::text').get()country = tr.css('td:nth-child(6)::text').get()# 7 运营商speed = tr.css('td:nth-child(8)::text').get()# 9 存活时间verify_time = tr.css('td:nth-child(10)::text').get()item = IpProxyItem()item['ip'] = ipitem['port'] = portitem['anons'] = anonsitem['schema'] = schemaitem['position'] = positionitem['country'] = countryitem['schema'] = schemaitem['speed'] = speeditem['verify_time'] = verify_timeprint(item)yield item

注意点:

  • name :标识蜘蛛. 它在一个项目中必须是唯一的,也就是说,不能为不同的Spider设置相同的名称.
  • start_requests() :必须返回一个可迭代的Requests(您可以返回请求列表或编写生成器函数),Spider将开始从中进行爬网. 随后的请求将从这些初始请求中依次生成.
  • parse() :将被调用以处理为每个请求下载的响应的方法. response参数是TextResponse一个实例,该实例保存页面内容并具有其他有用的方法来处理它.

编写pipe保存数据

在piplelines.py文件中编写代码,将数据保存到redis库中。
同时,切记在配置文件中进行配置。

# 使用 connection pool 来管理对一个 redis server 的所有连接,避免每次建立、释放连接的开销
redis_pool = redis.ConnectionPool(host='192.168.xx.xx', port=6379, decode_responses=True, password='your password')
class IpProxyPipeline:def process_item(self, item, spider):self.save_redis(item)return itemdef save_redis(self, item):"""redis 提供两个类 Redis 和 StrictRedis, StrictRedis 用于实现大部分官方的命令,Redis 是 StrictRedis 的子类,用于向后兼用旧版本。redis 取出的结果默认是字节,我们可以设定 decode_responses=True 改成字符串:return:"""# 从连接池获取redis_server1 = redis.StrictRedis(connection_pool=redis_pool)# 直接创建连接# redis_server2 = redis.StrictRedis(host='192.168.xx.xx', port=6379, password='your password')# redis cache, push类似list.appendredis_server1.rpush('iplist', '{}://{}:{}'.format(item['schema'].lower(), item['ip'], item['port']))

配置pipe

# Configure item pipelines
ITEM_PIPELINES = {'ipproxys.pipelines.IpProxyPipeline': 300,
}

运行项目

按蜘蛛名称运行

scrapy crawl free_ip

也可以按文件运行:scrapy runspider <spider_file.py>

附录:试用代理

url = 'https://www.baidu.com'
# 从redis获取代理ip列表,循环试用
for i in range(redis_server1.llen('iplist')):ip_proxy = redis_server1.lindex('iplist', i)# 区分http和https,如果拆分为两个key,则更方便一些schame = 'http' if url.find(':') == 5 else 'https'if schame == ip_proxy[0:5]:proxies[schame] = ip_proxytry:# 超时分为连接超时和读取超时res = requests.get(url=url, proxies=proxies, timeout=(5, 20))if res.status_code == 200:print('ok')breakexcept Exception as ex:print(ex)

Scrapy抓取免费ip代理地址的示例相关推荐

  1. Python爬虫方式抓取免费http代理IP

    我们新手在练手的时候,常常需要一些代理IP进行爬虫抓取,但是因为学习阶段,对IP质量要求不高,主要是弄懂原理,所以花钱购买爬虫代理IP就显得没必要(大款忽略),今天跟大家分享一下,如果使用爬虫抓取免费 ...

  2. python抓取免费ip存入redis

    前言 网络爬虫在运行过程中并不顺利,总是会遇到各种各样的问题,如fan爬虫策略,它会试图阻止网络爬虫的运行,限制我们的的ip,所以说我们先需要在请求的时候加上代理ip,避免真实ip被封禁.在某代理批量 ...

  3. 用Python爬虫抓取免费代理IP

    点击上方"程序员大咖",选择"置顶公众号" 关键时刻,第一时间送达! 不知道大家有没有遇到过"访问频率太高"这样的网站提示,我们需要等待一段 ...

  4. scrapy爬取免费代理IP存储到数据库构建自有IP池

    以抓取西刺代理网站的高匿IP并存储到mysql数据库为例 西刺网:http://www.xicidaili.com/nn/ 运行环境:scrapy1.0.3 python2.7.10 需要安装MySQ ...

  5. 应对IP被封--抓取西刺代理,并构建自己的代理池

    一.IP简介: 互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),缩写为IP地址(英语:IP Address),是分配给网络上使用网际协议(英语:Inte ...

  6. 逆向爬虫18 Scrapy抓取全站数据和Redis入门

    逆向爬虫18 Scrapy抓取全站数据和Redis入门 一.全站数据抓取 1. 什么是抓取全站数据? 我们曾经在过猪八戒,图片之家,BOSS直聘等网站,利用网站官方提供的搜索功能,搜索指定关键词的内容 ...

  7. 免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作简易流量爬虫...

    前言 我们之前的爬虫都是模拟成浏览器后直接爬取,并没有动态设置IP代理以及UserAgent标识,这样很容易被服务器封IP,因此需要设置IP代理,但又不想花钱买,网上有免费IP代理,但大多都数都是不可 ...

  8. 爬虫学习3.2 抓取西刺代理,并构建自己的代理池

    任务描述 学习什么是IP,为什么会出现IP被封,如何应对IP被封的问题. 抓取西刺代理,并构建自己的代理池. 西刺直通点:https://www.xicidaili.com/ . 参考资料:https ...

  9. python scrapy 抓取脚本之家文章(scrapy 入门使用简介)

    老早之前就听说过python的scrapy.这是一个分布式爬虫的框架,可以让你轻松写出高性能的分布式异步爬虫.使用框架的最大好处当然就是不同重复造轮子了,因为有很多东西框架当中都有了,直接拿过来使用就 ...

最新文章

  1. 设计模式之---Factory
  2. UA PHYS515A 电磁理论V 电磁波与辐射6 波导
  3. 【Python】表格文件处理
  4. 鸿蒙系统跟腾讯合作,要和华为鸿蒙竞争?腾讯系统开源了,仅1.8K,支持众多芯片 - 区块网...
  5. 多线程面试体系列(13):多线程同步内功心法——PV操作下
  6. 双向链表中基本函数的实现
  7. 操作给定的二叉树,将其变换为源二叉树的镜像。
  8. 【QT】入门基础教程Qt5
  9. Adreno GPU Profiler工具使用总结
  10. 干货|看怎么肢解堆垛机!
  11. const注意点(对象赋值)
  12. 微软正版验证_真正纯净无捆绑微软官方原版windows10安装教程无删减完整版
  13. 如何手动释放Python的内存
  14. 程序员数学(23)–图形的旋转与中心对称
  15. win10一直显示正在更新怎么关闭计算机,Win10自动更新关不掉?原来就少这么一步...
  16. iOS 15 新功能:即使手机关闭,也能找到丢失的iPhone
  17. android登录加密传输,android环境下两种md5加密方式(示例代码)
  18. 交叉表的概念及sql中交叉表的使用
  19. 2021年全球潜孔锤钻头收入大约1119.1百万美元,预计2028年达到1382.2百万美元
  20. kvm 1.创建虚拟机

热门文章

  1. 【中级前端面经】中小型公司面试时都会问些什么?
  2. 指数级数据增长的破局之道?“AI治数”的新玩法你不能不知道
  3. PHP sg11加密解密 sg解密
  4. 学习HTML心得体会
  5. 超越芯片和AI,硬科技资本为什么越来越“硬核”?
  6. 真无线蓝牙耳机推荐,千元以下蓝牙耳机性价比之王
  7. 康复评定复习题(有答案版)
  8. 爬虫日记-模拟登录cookie操作
  9. Android订票系统订票功能实现(特效点击按钮实现票数自动加减1)
  10. 人工智能NLP自动写文章软件