Scrapy框架爬取西刺代理网免费高匿代理的实现代码

分析

需求:

爬取西刺代理网免费高匿代理,并保存到MySQL数据库中。

这里只爬取前10页中的数据。

思路:

  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,
}

结果

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • Python里字典的基本用法(包括嵌套字典)

    Python字典的基本用法 创建字典: myDict1 = { '薛之谦':'我叫薛之谦', '吴青峰':'我叫吴青峰', '李宇春':'我叫李宇春', '花花':'我叫花花', '赵雷':'我叫赵雷' } emptyDict = {} myDict2 = dict(薛之谦 = '我叫薛之谦',吴青峰 = '我叫吴青峰') myDict3 = dict((('薛之谦','我叫薛之谦'),('吴青峰','我叫吴青峰'))) print(myDict1 ,'\n', myDict2 ,'\n', m

  • 浅谈Scrapy网络爬虫框架的工作原理和数据采集

    今天小编给大家详细的讲解一下Scrapy爬虫框架,希望对大家的学习有帮助. 1.Scrapy爬虫框架 Scrapy是一个使用Python编程语言编写的爬虫框架,任何人都可以根据自己的需求进行修改,并且使用起来非常的方便.它可以应用在数据采集.数据挖掘.网络异常用户检测.存储数据等方面. Scrapy使用了Twisted异步网络库来处理网络通讯.整体架构大致如下图所示. 2.由上图可知Scrapy爬虫框架主要由5个部分组成,分别是:Scrapy Engine(Scrapy引擎),Scheduler

  • 在Pycharm中执行scrapy命令的方法

    当你检查scrapy二进制文件时,你会注意到这么一段python script #!/usr/bin/python from scrapy.cmdline import execute execute() 这意味着 一个scrapy命令,比如 scrapy crawl IcecatCrawler 也可以这么表达: python /Library/Python/2.7/site-packages/scrapy/cmdline.py crawl IcecatCrawler 所以,只能我们找到pych

  • Python利用字典破解WIFI密码的方法

    最近看到网上的一些作品,然后进行一些完善.只是用于学习,不要去干坏事哦.程序来源于网,我只是做了一些优化.当然这种方法破解还是有点慢哦.我用的python 3.6.5 既然要破解wifi,那么连接wifi的模块首先要有的,我们要导入pywifi模块. 有些同学可能没有这个,如果直接通过pip安装的话,可能不能用,听说这个wifi模块被停用了,所以大家如果通过pip安装的不行,那么就下载我提供的. 链接:https://pan.baidu.com/s/1rn-5F1CS5UXOTcLh3QAMhg

  • Python的UTC时间转换讲解

    UTC时间转换,最终得到的都是UTC时间. 简单来说就是: 时间戳(timestamp) 转换-> UTC显示时间(datetime),使用time.gmtime(timestamp). 显示时间(datetime) 转换-> UTC时间戳(timestamp),使用calendar.timegm(datetime.timetuple()). 注意: VC下相应的接口是gmtime和_mkgmtime. 代码: # -*- coding: gb2312 -*- # UTC时间转换,最终得到的都

  • Scrapy框架爬取Boss直聘网Python职位信息的源码

    分析 使用CrawlSpider结合LinkExtractor和Rule爬取网页信息 LinkExtractor用于定义链接提取规则,一般使用allow参数即可 LinkExtractor(allow=(), # 使用正则定义提取规则 deny=(), # 排除规则 allow_domains=(), # 限定域名范围 deny_domains=(), # 排除域名范围 restrict_xpaths=(), # 使用xpath定义提取队则 tags=('a', 'area'), attrs=(

  • Python创建字典的八种方式

    1.创建空字典 >>> dic = {} >>> type(dic) <type 'dict'> 2.直接赋值创建 >>> dic = {'spam':1, 'egg':2, 'bar':3} >>> dic {'bar': 3, 'egg': 2, 'spam': 1} 3.通过关键字dict和关键字参数创建 >>> dic = dict(spam = 1, egg = 2, bar =3) >&

  • Python使用字典的嵌套功能详解

    当需要存储很多同类型的不通过数据时可能需要使用到嵌套,先用一个例子说明嵌套的使用 1.在列表中存储字典 #假设年级里有一群国际化的学生,有黄皮肤的中国人.有白皮肤的美国人也有黑皮肤的非洲人,只记录部分特征 student_1={'nationality':'China','colour':'yellow','age':'15'} student_2={'nationality':'America','colour':'white','age':'18'} student_3={'national

  • Python中使用遍历在列表中添加字典遇到的坑

    """ 已知列表li = [{"key": 5}, {"key": 9}, {"key": -1}, {"key": 4}] , 定义一个函数,将该列表按照其元素的value 值进行排序,并输出结果 """ 思路很清晰,新建一个列表,然后遍历取出字典的值加入到新的列表中,再通过遍历,赋值字典,使用append方法依次添加到列表,这样就是一个按照value值排续.于是有

  • scrapy-redis的安装部署步骤讲解

    先说下自己的环境,redis是部署在centos上的,爬虫运行在windows上, 1. 安装redis yum install -y redis 2. 修改配置文件 vi /etc/redis.conf 将 protected-mode no解注释,否则的话,在不设置密码情况下远程无法连接redis 3. 重启redis systemctl restart redis 4. 关闭防火墙 systemctl stop firewalld.service 5. 开始创建scrapy-redis的相

随机推荐