Scrapy框架爬取西刺代理网免费高匿代理的实现代码


Posted in Python onFebruary 22, 2019

分析

需求:

爬取西刺代理网免费高匿代理,并保存到MySQL数据库中。

这里只爬取前10页中的数据。

Scrapy框架爬取西刺代理网免费高匿代理的实现代码

思路:

  1. 分析网页结构,确定数据提取规则
  2. 创建Scrapy项目
  3. 编写item,定义数据字段
  4. 编写spider,实现数据抓取
  5. 编写Pipeline,保存数据到数据库中
  6. 配置settings.py文件
  7. 运行爬虫项目

代码实现

items.py

import scrapy
class XicidailiItem(scrapy.Item):
  # 国家
  country=scrapy.Field()
  # IP地址
  ip=scrapy.Field()
  # 端口号
  port=scrapy.Field()
  # 服务器地址
  address=scrapy.Field()
  # 是否匿名
  anonymous=scrapy.Field()
  # 类型
  type=scrapy.Field()
  # 速度
  speed=scrapy.Field()
  # 连接时间
  connect_time=scrapy.Field()
  # 存活时间
  alive_time=scrapy.Field()
  # 验证时间
  verify_time=scrapy.Field()

xicidaili_spider.py

# !/usr/bin/env python
# -*- coding:utf-8 -*-
import scrapy
from myscrapy.items import XicidailiItem
class XicidailiSpider(scrapy.Spider):
  name = 'xicidaili'
  allowed_domains=['www.xicidaili.com']
  # start_urls=['http://www.xicidaili.com/nn/1']
  def start_requests(self):
    urls=[]
    for i in range(1,11):
      urls.append('http://www.xicidaili.com/nn/'+str(i))
    for url in urls:
      yield scrapy.Request(url,callback=self.parse,method='GET')
  def parse(self, response):
    tr_list=response.xpath('//table[@id="ip_list"]/tr')
    for tr in tr_list[1:]: # 过滤掉表头行
      item=XicidailiItem()
      item['country']=tr.xpath('./td[1]/img/@alt').extract_first()
      item['ip']=tr.xpath('./td[2]/text()').extract_first()
      item['port']=tr.xpath('./td[3]/text()').extract_first()
      item['address']=tr.xpath('./td[4]/a/text()').extract_first()
      item['anonymous']=tr.xpath('./td[5]/text()').extract_first()
      item['type']=tr.xpath('./td[6]/text()').extract_first()
      item['speed']=tr.xpath('./td[7]/div/@title').re(r'\d{1,3}\.\d{0,}')[0]
      item['connect_time']=tr.xpath('./td[8]/div/@title').re(r'\d{1,3}\.\d{0,}')[0]
      item['alive_time']=tr.xpath('./td[9]/text()').extract_first()
      item['verify_time']=tr.xpath('./td[10]/text()').extract_first()
      yield item

pipelines.py

class XicidailiPipeline(object):
  """
  西刺代理爬虫 item Pipeline
  create table xicidaili(
    id int primary key auto_increment,
    country varchar(10) not null,
    ip varchar(30) not null,
    port varchar(10) not null,
    address varchar(30) not null,
    anonymous varchar(10) not null,
    type varchar(20) not null,
    speed varchar(10) not null,
    connect_time varchar(20) not null,
    alive_time varchar(20) not null,
    verify_time varchar(20) not null);
  """
  def __init__(self):
    self.connection = pymysql.connect(host='localhost',
                     user='root',
                     password='123456',
                     db='mydb',
                     charset='utf8', # 不能用utf-8
                     cursorclass=pymysql.cursors.DictCursor)
  def process_item(self,item,spider):
    with self.connection.cursor() as cursor:
      sql='insert into xicidaili' \
        '(country,ip,port,address,anonymous,type,speed,connect_time,alive_time,verify_time) values' \
        '(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
      args=(item['country'],item['ip'],item['port'],item['address'],item['anonymous'],item['type'],item['speed'],item['connect_time'],item['alive_time'],item['verify_time'])
      spider.logger.info(args)
      cursor.execute(sql,args)
    self.connection.commit()
  def close_spider(self,spider):
    self.connection.close()

settings.py

ITEM_PIPELINES = {
  'myscrapy.pipelines.XicidailiPipeline': 300,
}

结果

Scrapy框架爬取西刺代理网免费高匿代理的实现代码

Scrapy框架爬取西刺代理网免费高匿代理的实现代码

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
记录Django开发心得
Jul 16 Python
Windows下安装python2.7及科学计算套装
Mar 05 Python
Python爬取成语接龙类网站
Oct 19 Python
python实现字符串加密 生成唯一固定长度字符串
Mar 22 Python
python导入坐标点的具体操作
May 10 Python
24式加速你的Python(小结)
Jun 13 Python
Python利用scapy实现ARP欺骗的方法
Jul 23 Python
python中的RSA加密与解密实例解析
Nov 18 Python
python编写微信公众号首图思路详解
Dec 13 Python
Python基础之字符串操作常用函数集合
Feb 09 Python
Python 线性回归分析以及评价指标详解
Apr 02 Python
Python 读写 Matlab Mat 格式数据的操作
May 19 Python
在Python运行时动态查看进程内部信息的方法
Feb 22 #Python
Python开启线程,在函数中开线程的实例
Feb 22 #Python
python 多线程串行和并行的实例
Feb 22 #Python
Python OOP类中的几种函数或方法总结
Feb 22 #Python
VSCode Python开发环境配置的详细步骤
Feb 22 #Python
python中logging模块的一些简单用法的使用
Feb 22 #Python
Python 限制线程的最大数量的方法(Semaphore)
Feb 22 #Python
You might like
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
php中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
2014/10/15 PHP
php通过记录IP来防止表单重复提交方法分析
2014/12/16 PHP
php实现的单一入口应用程序实例分析
2015/09/23 PHP
Zend Framework基于Command命令行建立ZF项目的方法
2017/02/18 PHP
javascript中判断一个值是否在数组中并没有直接使用
2012/12/17 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
checkbox设置复选框的只读效果不让用户勾选
2013/08/12 Javascript
浅谈javascript中call()、apply()、bind()的用法
2015/04/20 Javascript
JavaScript设计模式经典之工厂模式
2016/02/24 Javascript
jQuery实现点击行选中或取消CheckBox的方法
2016/08/01 Javascript
Vue2.0实现购物车功能
2017/06/05 Javascript
基于JavaScript中字符串的match与replace方法(详解)
2017/12/04 Javascript
[52:08]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第一局
2016/03/05 DOTA
[01:20]PWL S2开团时刻第三期——团战可以输 蝙蝠必须死
2020/11/26 DOTA
python3.3教程之模拟百度登陆代码分享
2014/01/16 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
python使用tornado实现简单爬虫
2018/07/28 Python
Python修改文件往指定行插入内容的实例
2019/01/30 Python
pandas中的series数据类型详解
2019/07/06 Python
python实现简单俄罗斯方块
2020/03/13 Python
YSL Beauty加拿大官方商城:圣罗兰美妆加拿大
2017/05/15 全球购物
天猫国际进口超市直营:官方直采,一站购齐
2017/12/11 全球购物
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
体育教育个人自荐信范文
2013/12/01 职场文书
提拔干部考察材料
2014/05/26 职场文书
校本教研活动总结
2014/07/01 职场文书
班主任与学生安全责任书
2014/07/25 职场文书
党员群众路线自我剖析材料
2014/10/06 职场文书
宾馆安全管理制度
2015/08/06 职场文书
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL
安装配置mysql及Navicat prenium的详细流程
2021/06/10 MySQL
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android
JS 4个超级实用的小技巧 提升开发效率
2021/10/05 Javascript
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技