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实现将文件归档到zip文件及从zip文件中读取数据的方法
May 22 Python
Python利用递归和walk()遍历目录文件的方法示例
Jul 14 Python
Python reduce()函数的用法小结
Nov 15 Python
解决Django migrate No changes detected 不能创建表的问题
May 27 Python
Python学习小技巧总结
Jun 10 Python
详解Python字典的操作
Mar 04 Python
python不相等的两个字符串的 if 条件判断为True详解
Mar 12 Python
解决python DataFrame 打印结果不换行问题
Apr 09 Python
python:删除离群值操作(每一行为一类数据)
Jun 08 Python
Python实现敏感词过滤的4种方法
Sep 12 Python
Jupyter Notebook添加代码自动补全功能的实现
Jan 07 Python
Python常遇到的错误和异常
Nov 02 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
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
2015/09/30 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
PHP 代码简洁之道(小结)
2019/10/16 PHP
jquery中的 $("#jb51")与document.getElementById("jb51") 的区别
2011/07/26 Javascript
各种常用的JS函数整理
2013/10/25 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
2015/06/19 Javascript
javascript中的五种基本数据类型
2015/08/26 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
2016/05/10 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
深入理解JavaScript中的尾调用(Tail Call)
2017/02/07 Javascript
JavaScript实现翻页功能(附效果图)
2017/02/16 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
JS实现提示框跟随鼠标移动
2019/08/27 Javascript
vue实现弹幕功能
2019/10/25 Javascript
python制作朋友圈九宫格图片
2019/11/03 Python
Python3如何在服务器打印资产信息
2020/08/27 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
美国正版电视节目和电影在线观看:Hulu
2018/05/24 全球购物
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
极简鞋类,赤脚的感觉:Lems Shoes
2019/08/06 全球购物
几道PHP的面试题
2012/05/19 面试题
竟聘演讲稿范文
2013/12/31 职场文书
优秀大学生自荐信
2014/06/09 职场文书
初中差生评语
2014/12/29 职场文书
2015小学教师德育工作总结
2015/05/12 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python
python字典的元素访问实例详解
2021/07/21 Python
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python