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 相关文章推荐
python实现的简单猜数字游戏
Apr 04 Python
Python多线程编程(八):使用Event实现线程间通信
Apr 05 Python
python使用mailbox打印电子邮件的方法
Apr 30 Python
Python装饰器原理与简单用法实例分析
Apr 29 Python
Python实现正整数分解质因数操作示例
Aug 01 Python
对pycharm 修改程序运行所需内存详解
Dec 03 Python
Python面向对象程序设计类的多态用法详解
Apr 12 Python
python批量修改ssh密码的实现
Aug 08 Python
浅谈Python的方法解析顺序(MRO)
Mar 05 Python
.img/.hdr格式转.nii格式的操作
Jul 01 Python
Python -m参数原理及使用方法解析
Aug 21 Python
Python函数__new__及__init__作用及区别解析
Aug 31 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
将酷狗krc歌词解析并转换为lrc歌词php源码
2014/06/20 PHP
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
PHP队列用法实例
2014/11/05 PHP
php中 $$str 中 "$$" 的详解
2015/07/06 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
PHP实现数组根据某个单元字段排序操作示例
2018/08/01 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
javascript 日期时间函数(经典+完善+实用)
2009/05/27 Javascript
jquery简单的拖动效果实现原理及示例
2013/07/26 Javascript
JS将光标聚焦在文本最后的实现代码
2014/03/28 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
JavaScript 学习笔记之操作符
2015/01/14 Javascript
BootStrap3学习笔记(一)之网格系统
2016/05/20 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
jQuery实现为动态添加的元素绑定事件实例分析
2018/09/07 jQuery
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
[01:19:33]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第一场 2月2日
2021/03/11 DOTA
python的几种开发工具介绍
2007/03/07 Python
详解Python中的四种队列
2018/05/21 Python
对numpy中的数组条件筛选功能详解
2018/07/02 Python
django使用django-apscheduler 实现定时任务的例子
2019/07/20 Python
jupyter lab文件导出/下载方式
2020/04/22 Python
Python实现石头剪刀布游戏
2021/01/20 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
白俄罗斯大卖场:21vek.by
2019/07/25 全球购物
数组越界问题
2015/10/21 面试题
销售代表求职自荐信
2013/10/01 职场文书
法人授权委托书样本
2014/09/19 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
客服专员岗位职责范本
2015/04/07 职场文书
热血教师观后感
2015/06/10 职场文书
五一放假通知怎么写
2015/08/18 职场文书
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers