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 相关文章推荐
python3制作捧腹网段子页爬虫
Feb 12 Python
Python实现好友全头像的拼接实例(推荐)
Jun 24 Python
Python自定义一个类实现字典dict功能的方法
Jan 19 Python
python3对接mysql数据库实例详解
Apr 30 Python
Python pip替换为阿里源的方法步骤
Jul 02 Python
Django实现简单网页弹出警告代码
Nov 15 Python
Pytorch maxpool的ceil_mode用法
Feb 18 Python
python实现字符串和数字拼接
Mar 02 Python
Python使用jupyter notebook查看ipynb文件过程解析
Jun 02 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
Nov 17 Python
详解python 条件语句和while循环的实例代码
Dec 28 Python
Python获取字典中某个key的value
Apr 13 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
香妃
2021/03/03 冲泡冲煮
php牛逼的面试题分享
2013/01/18 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
强制设为首页代码
2006/06/19 Javascript
7个Javascript地图脚本整理
2009/10/20 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
JavaScript实现动态添加,删除行的方法实例详解
2015/07/02 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
基于滚动条位置判断的简单实例
2017/12/14 Javascript
ReactNative中使用Redux架构总结
2017/12/15 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
深度了解vue.js中hooks的相关知识
2019/06/14 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
layui实现根据table数据判断按钮显示情况的方法
2019/09/26 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
微信小程序实现购物车功能
2020/11/18 Javascript
Python functools模块学习总结
2015/05/09 Python
python3解析库BeautifulSoup4的安装配置与基本用法
2018/06/26 Python
Pytorch mask_select 函数的用法详解
2020/02/18 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
草莓巧克力:Shari’s Berries
2017/02/07 全球购物
爱尔兰电脑、家电和家具购物网站:Buy It Direct
2019/07/09 全球购物
贝佳斯官方网站:Borghese
2020/05/08 全球购物
中学生团员自我评价分享
2013/12/07 职场文书
2014迎新年晚会策划方案
2014/02/23 职场文书
法律系毕业生自荐信范文
2014/03/27 职场文书
请假条怎么写
2014/04/10 职场文书
大学同学会活动方案
2014/08/20 职场文书
毕业生政审意见范文
2015/06/04 职场文书
go goroutine 怎样进行错误处理
2021/07/16 Golang