初尝scrapy捉取数据保存到mysql

2 篇文章 0 订阅
1 篇文章 0 订阅

前言:很久之前就在b站上看过一些博主的scrapy视频,不过最近找的时候下架了…(难受.png)…不过凭着还有一点印象,再加上无所不能的百度。还是整出了个流程。这里记录一下。(windows下)

一、安装scrapy pip install scrapy 详细的我这里就不讲了,网上很多要看的可以去找一下。

二、因为我之前已经安装好了,所以直接进入主题。

1.创建项目,这次我要捉取的数据是一个ip网站的ip,网站用www.ip.com代替
cmd进入我们scrapy安装目录下。scrapy startproject getip 然后cd getip 进入getip,再scrapy genspider -t crawl ip ip.com 这样我们就创建好了这个项目
2.然后我们进入到 cd getip cd getip下的 ip.py 文件
在这里插入图片描述
这个原始页面上name不用理他,然后allowed_domains是允许是域名,start_urls是开始的url 我们把他设置成第一页面的url http://www.ip.com/?page=1 然后再下面rules是一个规则,allow是允许匹配链接的模式,我们可以利用这个规则去提取他的下一页 我这里写成 .+ip.com/\?page=\d 这样他就可以在当前页面找到符合规则的其他页面的url。callback是回调函数,就是响应后去操作的方法。follow是否允许当前页面匹配生成新的url 这里True是允许。
3.这样我们就可以去执行这个项目了 执行项目的话 在根目录下创建一个start.py文件

#encoding:utf-8
from scrapy import cmdline
cmdline.execute("scrapy crawl ip".split())   # ip是主文件的名字

然后执行这个文件,他会报错404 我们需要去找settings.py 修改他里面的机器人协议

# Obey robots.txt rules
ROBOTSTXT_OBEY = True   # 把True修改成False

settings.py文件里面还有常用的地方要修改的几个地方,这里也一并指出,

# 1  ITEM_PIPELINES :这个注释的话,会无限访问。容易被识别成机器人。所以要取消注释,一般设置1到2秒 
DOWNLOAD_DELAY = 2
# 2  这个是启用一个item_pipelines组件,让item的数据可以传到pipelines管道
ITEM_PIPELINES = {
   'getip.pipelines.GetipPipeline': 300,
}
# 3 DEFAULT_REQUEST_HEADERS:设置请求头部基本信息
DEFAULT_REQUEST_HEADERS = {
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'Accept-Language': 'en',
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
}

再次运行start.py 就可以看到页面信息了 接下来就是提取页面信息了。

4.然后我们用xpath提取 ip、端口、协议
在这里插入图片描述
他网站一页面只有10条,从这里我们可以看到他已经把多页数据提取出来了。

三、把他传到管道中保存

1 我们去到items.py文件定义我们要提取的参数。
在这里插入图片描述
把这三个我们要的参数放进去 。
2. 然后在ip.py中引入这个类 from getip.items import GetipItem
3. 最后我们回到ip.py文件 把循环出来的ip信息用yield传到pipelines.py里面去永久化
在这里插入图片描述

然后去到pipelines.py文件里面打印出item看看他是不是我们要的数据
在这里插入图片描述
我们可以看到我们想要的数据已经到了这里。接下来就是存储到数据库了

四、永久化到数据库

1.先给数据库建一个表,表名proxy_info 他包含有主键(id),ip(ip),端口(port),协议(https)

# 创建一个数据库
create database xiaolanlan;
#选择数据库
use xiaolanlan;
#创建表
create table if not exists `proxy_info`(
     `id` int unsigned auto_increment,
     `ip` varchar(20) not null,
     `port` int(8) not null,
     `http` varchar(20) not null,
     primary key (`id`)
     )engine=Innodb default charset=utf8;

2然后用pymysql把数据存到数据库中
在这里插入图片描述

3.接下来我们看一眼数据库有没有保存有数据
在这里插入图片描述
可以看到数据已经存到数据库了。
PS:暂时写到这里,刚开始看scrapy,如果有错误请提醒一下,谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scrapy提供了一个方便的Pipeline来将数据存储到MySQL数据库中。要将数据存储到MySQL中,您需要安装pymysql库。可以使用以下命令来安装: ``` pip install pymysql ``` 然后,在项目的settings.py文件中添加以下代码: ```python ITEM_PIPELINES = { 'myproject.pipelines.MySQLPipeline': 300, } MYSQL_HOST = 'localhost' # MySQL服务器地址 MYSQL_DBNAME = 'mydatabase' # MySQL数据库名 MYSQL_USER = 'myuser' # MySQL用户名 MYSQL_PASSWD = 'mypassword' # MySQL密码 ``` 接下来,您需要创建名为MySQLPipeline.py的文件,并在其中编写将数据存储到MySQL的代码: ```python import pymysql class MySQLPipeline(object): def __init__(self, host, dbname, user, password): self.host = host self.dbname = dbname self.user = user self.password = password @classmethod def from_crawler(cls, crawler): return cls( host=crawler.settings.get('MYSQL_HOST'), dbname=crawler.settings.get('MYSQL_DBNAME'), user=crawler.settings.get('MYSQL_USER'), password=crawler.settings.get('MYSQL_PASSWD') ) def open_spider(self, spider): self.conn = pymysql.connect(host=self.host, user=self.user, password=self.password, db=self.dbname) self.cursor = self.conn.cursor() def close_spider(self, spider): self.conn.commit() self.conn.close() def process_item(self, item, spider): sql = "INSERT INTO mytable (column1, column2) VALUES (%s, %s)" self.cursor.execute(sql, (item['field1'], item['field2'])) return item ``` 在上面的代码中,我们使用了pymysql库来连接到MySQL数据库。在open_spider()方法中我们打开了数据库连接,并使用process_item()方法将数据插入到MySQL中。在close_spider()方法中,我们提交了所有的更改并关闭了数据库连接。 最后,确保您的Spider中的Item具有相应的字段名称,以便可以在process_item()方法中访问它们。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值