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自动格式化json文件的方法
Mar 11 Python
Python 创建子进程模块subprocess详解
Apr 08 Python
Python字符串匹配算法KMP实例
Jul 18 Python
利用python获取当前日期前后N天或N月日期的方法示例
Jul 30 Python
基于python进行桶排序与基数排序的总结
May 29 Python
详解Python time库的使用
Oct 10 Python
基于python plotly交互式图表大全
Dec 07 Python
如何使用Python破解ZIP或RAR压缩文件密码
Jan 09 Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 Python
Django之全局使用request.user.username的实例详解
May 14 Python
浅析Python requests 模块
Oct 09 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
Oct 23 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
使用PHP制作新闻系统的思路
2006/10/09 PHP
基于Zend的Captcha机制的应用
2013/05/02 PHP
php基于session锁防止阻塞请求的方法分析
2017/08/07 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
2018/10/31 PHP
基于jquery实现后台左侧菜单点击上下滑动显示
2013/04/11 Javascript
JS Map 和 List 的简单实现代码
2013/07/08 Javascript
jquery——九宫格大转盘抽奖实例
2017/01/16 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
详解webpack运行Babel教程
2018/06/13 Javascript
JavaScript面向对象继承原理与实现方法分析
2018/08/09 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
2019/03/27 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
微信小程序调用后台service教程详解
2020/11/06 Javascript
Python实现基本线性数据结构
2016/08/22 Python
git进行版本控制心得详谈
2017/12/10 Python
python监控键盘输入实例代码
2018/02/09 Python
python 字典修改键(key)的几种方法
2018/08/10 Python
python 利用pandas将arff文件转csv文件的方法
2019/02/12 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
Python urlopen()参数代码示例解析
2020/12/10 Python
详解pandas映射与数据转换
2021/01/22 Python
python 三种方法提取pdf中的图片
2021/02/07 Python
香港彩色隐形眼镜在线商店:Stunninglens(全球免费送货)
2019/05/10 全球购物
远东集团网络工程师面试题
2014/10/20 面试题
大学生标准推荐信范文
2013/11/25 职场文书
企事业单位求职者的自我评价
2013/12/28 职场文书
毕业证丢失证明
2014/01/15 职场文书
《小儿垂钓》教学反思
2014/02/23 职场文书
人资专员岗位职责
2014/04/04 职场文书
2014镇党委班子对照检查材料思想汇报
2014/09/23 职场文书
客服专员岗位职责范本
2015/04/07 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
争做文明公民倡议书
2019/06/24 职场文书
CocosCreator入门教程之网络通信
2021/04/16 Javascript