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中的__getitem__方法与slice对象的切片操作
Jun 27 Python
浅谈scrapy 的基本命令介绍
Jun 13 Python
Python continue继续循环用法总结
Jun 10 Python
python实现猜单词小游戏
May 22 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
Python 窗体(tkinter)按钮 位置实例
Jun 13 Python
python开启debug模式的方法
Jun 27 Python
Django models.py应用实现过程详解
Jul 29 Python
Django 对象关系映射(ORM)源码详解
Aug 06 Python
python 使用while写猜年龄小游戏过程解析
Oct 07 Python
导致python中import错误的原因是什么
Jul 01 Python
浅析Python中字符串的intern机制
Oct 03 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
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
PHP变量内存分配问题记录整理
2013/11/27 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
Jquery实现视频播放页面的关灯开灯效果
2013/05/27 Javascript
js setTimeout 参数传递使用介绍
2013/08/13 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
2013/11/19 Javascript
一个获取第n个元素节点的js函数
2014/09/02 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
jQuery EasyUI中DataGird动态生成列的方法
2016/04/05 Javascript
微信小程序 实战小程序实例
2016/10/08 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
BootStrap selectpicker后台动态绑定数据
2017/06/01 Javascript
Node.js操作系统OS模块用法分析
2019/01/04 Javascript
基于vue手写tree插件的那点事儿
2019/08/20 Javascript
Element Dropdown下拉菜单的使用方法
2020/07/26 Javascript
JavaScript实现瀑布流布局的3种方式
2020/12/27 Javascript
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
[00:14]护身甲盾
2019/03/06 DOTA
使用python 获取进程pid号的方法
2014/03/10 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
2020/01/14 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
英国浴室洗脸盆购物网站:Click Basin
2018/06/08 全球购物
数据管理员的自我评价分享
2013/11/15 职场文书
工厂门卫岗位职责
2013/11/25 职场文书
关于迟到的检讨书
2014/01/26 职场文书
乡镇党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
安全保证书
2015/01/16 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python
利用Python脚本写端口扫描器socket,python-nmap
2022/07/23 Python