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创建二维数组实例(关于list的一个小坑)
Nov 07 Python
python爬虫之urllib3的使用示例
Jul 09 Python
Python wxPython库使用wx.ListBox创建列表框示例
Sep 03 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
Jan 08 Python
Python3删除排序数组中重复项的方法分析
Jan 31 Python
Python时间序列处理之ARIMA模型的使用讲解
Apr 02 Python
Python自定义一个异常类的方法
Jun 27 Python
Python3 tkinter 实现文件读取及保存功能
Sep 12 Python
深入浅析Python科学计算库Scipy及安装步骤
Oct 12 Python
python 爬虫 实现增量去重和定时爬取实例
Feb 28 Python
基于python连接oracle导并出数据文件
Apr 28 Python
matplotlib之多边形选区(PolygonSelector)的使用
Feb 24 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定时自动生成静态HTML的实现代码
2010/06/20 PHP
PHP中返回引用类型的方法
2015/04/03 PHP
PHP自定义错误用法示例
2016/09/28 PHP
Laravel模糊查询区分大小写的实例
2019/09/29 PHP
IE与FireFox中的childNodes区别
2011/10/20 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
js和jquery对dom节点的操作(创建/追加)
2013/04/21 Javascript
javascript字符串循环匹配实例分析
2015/07/17 Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
2016/09/08 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
2018/01/13 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
Vue多种方法实现表头和首列固定的示例代码
2018/02/02 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
2020/04/13 Javascript
利用React高阶组件实现一个面包屑导航的示例
2020/08/23 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
浅析Python装饰器以及装饰器模式
2018/05/28 Python
python编写简易聊天室实现局域网内聊天功能
2018/07/28 Python
详解windows python3.7安装numpy问题的解决方法
2018/08/13 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
详解python数据结构和算法
2019/04/18 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
python 实现PIL模块在图片画线写字
2020/05/16 Python
virtualenv介绍及简明教程
2020/06/23 Python
Perfumetrader荷兰:香水、化妆品和护肤品在线商店
2017/09/15 全球购物
自我鉴定注意事项
2014/01/19 职场文书
经典团队口号
2014/06/06 职场文书
责任书范本
2014/08/25 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
68句权威创业名言
2019/08/26 职场文书
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB