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函数式编程指南(二):从函数开始
Jun 24 Python
Python中Selenium模拟JQuery滑动解锁实例
Jul 26 Python
Python3实现对列表按元组指定列进行排序的方法分析
Dec 22 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
python ddt数据驱动最简实例代码
Feb 22 Python
Python为何不能用可变对象作为默认参数的值
Jul 01 Python
通过python实现弹窗广告拦截过程详解
Jul 10 Python
Django values()和value_list()的使用
Mar 31 Python
Jupyter打开图形界面并画出正弦函数图像实例
Apr 24 Python
python多进程使用函数封装实例
May 02 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
Jun 29 Python
Pycharm中如何关掉python console
Oct 27 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中Cannot send session cache limiter 的问题的方法
2007/04/27 PHP
PHP版微信公众平台红包API
2015/04/02 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
javascript eval和JSON之间的联系
2009/12/31 Javascript
jQuery的实现原理的模拟代码 -5 Ajax
2010/08/07 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
2012/10/11 Javascript
js实现有时间限制消失的图片方法
2015/02/27 Javascript
jQuery检测鼠标左键和右键点击的方法
2015/03/17 Javascript
js事件处理程序跨浏览器解决方案
2016/03/27 Javascript
浅谈javascript alert和confirm的美化
2016/12/15 Javascript
jquery.zclip轻量级复制失效问题
2017/01/08 Javascript
2种简单的js倒计时方式
2017/10/20 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
2019/01/08 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
简单了解JS打开url的方法
2020/02/21 Javascript
Vue实现Layui的集成方法步骤
2020/04/10 Javascript
python备份文件的脚本
2008/08/11 Python
使用python装饰器验证配置文件示例
2014/02/24 Python
Python通过解析网页实现看报程序的方法
2014/08/04 Python
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
详解Python3的TFTP文件传输
2018/06/26 Python
python 3.6.2 安装配置方法图文教程
2018/09/18 Python
Python基础之函数的定义与使用示例
2019/03/23 Python
python机器人运动范围问题的解答
2019/04/29 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
2019/11/28 Python
django教程如何自学
2020/07/31 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
端午节演讲稿
2014/05/23 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
国庆节标语大全
2014/10/08 职场文书
2014年部门工作总结
2014/11/12 职场文书
优秀党员先进材料
2014/12/18 职场文书
2015年外联部工作总结
2015/04/03 职场文书
JS数组的常用方法整理
2021/03/31 Javascript
MySQL千万级数据表的优化实战记录
2021/08/04 MySQL
python分分钟绘制精美地图海报
2022/02/15 Python