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的session中使用User对象的方法
Jul 23 Python
python实现识别相似图片小结
Feb 22 Python
基于python实现的抓取腾讯视频所有电影的爬虫
Apr 22 Python
python图片验证码生成代码
Jul 02 Python
python+matplotlib演示电偶极子实例代码
Jan 12 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
Feb 08 Python
Python两台电脑实现TCP通信的方法示例
May 06 Python
在django view中给form传入参数的例子
Jul 19 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
Feb 28 Python
Python进程间通信multiprocess代码实例
Mar 18 Python
教你如何用Python实现人脸识别(含源代码)
Jun 23 Python
Python将CSV文件转化为HTML文件的操作方法
Jun 30 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
基于文本的留言簿
2006/10/09 PHP
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
php中time()和mktime()方法的区别
2013/09/28 PHP
利用中国天气预报接口实现简单天气预报
2014/01/20 PHP
YII中assets的使用示例
2014/07/31 PHP
ejs v9 javascript模板系统
2012/03/21 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
javascript实现yield的方法
2013/11/06 Javascript
Jquery getJSON方法详细分析
2013/12/26 Javascript
javascript 获取iframe里页面中元素值的方法
2014/02/17 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
Javascript实现图片加载从模糊到清晰显示的方法
2016/06/21 Javascript
jquery实现左右滑动式轮播图
2017/03/02 Javascript
将input框中输入内容显示在相应的div中【三种方法可选】
2017/05/08 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
2019/08/23 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
vue使用canvas实现移动端手写签名
2020/09/22 Javascript
解决vue init webpack 下载依赖卡住不动的问题
2020/11/09 Javascript
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
python爬虫爬取监控教务系统的思路详解
2020/01/08 Python
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
军训感想500字
2014/02/20 职场文书
积极贯彻学习两会精神总结
2014/03/17 职场文书
2014年小学语文工作总结
2014/12/20 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
spring cloud gateway中如何读取请求参数
2021/07/15 Java/Android
关于PHP数组迭代器的使用方法实例
2021/11/17 PHP
mysql 子查询的使用
2022/04/28 MySQL
css弧边选项卡的项目实践
2023/05/07 HTML / CSS