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实现拓扑排序的基本教程
Mar 11 Python
Python实现的读写json文件功能示例
Jun 05 Python
使用Python读取二进制文件的实例讲解
Jul 09 Python
使用Flask集成bootstrap的方法
Jul 24 Python
django之跨表查询及添加记录的示例代码
Oct 16 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
Jun 13 Python
浅析python,PyCharm,Anaconda三者之间的关系
Nov 27 Python
Python如何急速下载第三方库详解
Nov 02 Python
Python实现我的世界小游戏源代码
Mar 02 Python
python 如何执行控制台命令与操作剪切板
May 20 Python
Pytorch 如何实现常用正则化
May 27 Python
numpy array找出符合条件的数并赋值的示例代码
Jun 01 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 rawurlencode与urlencode函数的深入分析
2013/06/08 PHP
分享一个php 的异常处理程序
2014/06/22 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
2015/01/13 PHP
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
js动态修改表格行colspan列跨度的方法
2015/03/30 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
AngularJS表单详解及示例代码
2016/08/17 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
2016/12/03 Javascript
js实现网页定位导航功能
2017/03/07 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
2017/03/29 Javascript
详解RequireJS按需加载样式文件
2017/04/12 Javascript
JavaScript 巧学巧用
2017/05/23 Javascript
在vue项目中引入highcharts图表的方法(详解)
2018/03/05 Javascript
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
[04:44]显微镜下的DOTA2第二期——你所没有注意到的细节
2014/06/20 DOTA
Python中的__SLOTS__属性使用示例
2015/02/18 Python
python实现用于测试网站访问速率的方法
2015/05/26 Python
Python for Informatics 第11章之正则表达式(二)
2016/04/21 Python
python实现汉诺塔递归算法经典案例
2021/03/01 Python
浅谈Python类的__getitem__和__setitem__特殊方法
2016/12/25 Python
pyqt5之将textBrowser的内容写入txt文档的方法
2019/06/21 Python
利用python实现周期财务统计可视化
2019/08/25 Python
浅析python内置模块collections
2019/11/15 Python
利用pyecharts读取csv并进行数据统计可视化的实现
2020/04/17 Python
Python自动化测试中yaml文件读取操作
2020/08/20 Python
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
html5小技巧之通过document.head获取head元素
2014/06/04 HTML / CSS
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
俄罗斯最大的消费电子连锁零售商:Mvideo
2017/06/25 全球购物
马来西亚演唱会订票网站:StubHub马来西亚
2018/10/18 全球购物
物理专业本科生自荐信
2014/01/30 职场文书
课例研修方案
2014/05/31 职场文书
部队2014年终工作总结
2014/11/27 职场文书
导游词之上饶龟峰
2019/10/25 职场文书