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实现简单点对点(p2p)聊天
Sep 13 Python
python操作MySQL 模拟简单银行转账操作
Sep 27 Python
关于Python的一些学习总结
May 25 Python
python 使用opencv 把视频分割成图片示例
Dec 12 Python
python实现大战外星人小游戏实例代码
Dec 26 Python
Python中logging日志库实例详解
Feb 19 Python
Python Django搭建网站流程图解
Jun 13 Python
python如何使用腾讯云发送短信
Sep 17 Python
python+openCV对视频进行截取的实现
Nov 27 Python
基于Python实现天天酷跑功能
Jan 06 Python
浅谈matplotlib默认字体设置探索
Feb 03 Python
Python中使用ipython的详细教程
Jun 22 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
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
随机广告显示(PHP函数)
2006/10/09 PHP
用 PHP5 轻松解析 XML
2006/12/04 PHP
用PHP读取和编写XML DOM的实现代码
2011/02/03 PHP
PHP实现微信退款功能
2018/10/02 PHP
js常见表单应用技巧
2008/01/09 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
JavaScript获取DOM元素的11种方法总结
2015/04/25 Javascript
AngularJS ng-bind 指令简单实现
2016/07/30 Javascript
Node.js使用gm拼装sprite图片
2017/07/04 Javascript
详解Vue-Cli 异步加载数据的一些注意点
2017/08/12 Javascript
javascript将list转换成树状结构的实例
2017/09/08 Javascript
基于vue,vue-router, vuex及addRoutes进行权限控制问题
2018/05/02 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
vue实现form表单与table表格的数据关联功能示例
2019/01/29 Javascript
js中async函数结合promise的小案例浅析
2019/04/14 Javascript
javascript实现对话框功能警告(alert 消息对话框)确认(confirm 消息对话框)
2019/05/07 Javascript
js回溯法计算最佳旅行线路代码实例
2019/09/11 Javascript
Python tkinter模块中类继承的三种方式分析
2017/08/08 Python
PyQt5利用QPainter绘制各种图形的实例
2017/10/19 Python
python2.7安装图文教程
2018/03/13 Python
python命令行参数用法实例分析
2019/06/25 Python
python scipy卷积运算的实现方法
2019/09/16 Python
python实现扫雷游戏
2020/03/03 Python
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
前端使用canvas生成盲水印的加密解密的实现
2020/12/16 HTML / CSS
阿里旅行:飞猪
2017/01/05 全球购物
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
教师产假请假条
2014/04/10 职场文书
小学生评语集锦
2014/04/18 职场文书
后勤个人工作总结
2015/02/28 职场文书
销售人员管理制度
2015/08/06 职场文书
Python基础之操作MySQL数据库
2021/05/06 Python
详解Laravel框架的依赖注入功能
2021/05/27 PHP