linux系统下scrapy爬虫自动筛选代理IP

爬虫往往要用到多个IP切换。而各代理网站的免费IP大多数都是无效的。一个个手工试是不可能的任务,我们就用爬虫来爬,并设置定时任务自动调度执行。

文中的工程采用scrapy来写爬虫,使用scrapy_proxies调度使用获取到的IP(用法详见链接中的说明),定义了crawlall的命令来同时执行所有的爬虫(来源忘记,可搜索scrapy crawlall)。

完整代码:https://github.com/dodolo-cc/proxy

环境

centos7 + python2.7 + scrapy1.2.2

创建爬虫工程

scrapy startproject proxy 

创建出来的目录结构如下:

proxy 
├── proxy #python代码放在这个目录下
│ ├── init.py  
│ ├── items.py #item文件
│ ├── pipelines.py #pipeline文件
│ ├── settings.py #项目的设置文件
│ └── spiders  #放爬虫文件的目录
│ └── init.py 
└── scrapy.cfg #项目配置文件

定义item文件

抓取代理ip要用到的字段很简单,就是IP、端口、代理类型三个

# items.py 文件
# -*- coding: utf-8 -*-

import scrapy

class ProxyItem(scrapy.Item):
    ip = scrapy.Field()
    port = scrapy.Field()
    p_type = scrapy.Field()

创建spider

本文以http://www.xicidaili.com为例,另外的代理网站,再写对应的spider即可

scrapy genspider xici www.xicidaili.com

爬虫名称为xici,允许爬取的域名是www.xicidaili.com
命令执行后,可以在spiders目录下找到文件xici.py

写spider

确定爬取链接的正则表达式

链接规律:

http://www.xicidaili.com/nn/1
http://www.xicidaili.com/nn/2
http://www.xicidaili.com/nn/3

免费IP失效很快,一般只抓最新的一两页就够了

r"http://www.xicidaili.com/nn/[1-2]$"

确定爬取内容的xpath

用chrome浏览器右键“检查”,如图红框里就是xpath

用chrome浏览器右键“检查”,如图红框里就是xpath。
chrome有时候会自动补全一些东西,可能会造成和实际xpath不符合的情况,这时可以改用firefox“查看元素”。
直接用firefox也很好,看个人习惯。

Spider代码

这个网站第一页没有本页的链接,所以起始页从第二页开始。否则是爬不到第一页的。其它的网站可能没有这个问题。

# xici.py文件
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值