十月故里 发表于 2020-5-5 21:35:26

python3代理池的搭建(二)

本帖最后由 十月故里 于 2020-5-5 23:38 编辑

前情回顾~电影里面好像都是这么来的
上一节我们讲到了构建爬取代理网站的代码块(没看过的童鞋,可以去看看哈 python3代理池的搭建(一)https://fishc.com.cn/thread-168107-1-1.html)
爬取完的信息很多,我们需要找个东西来存放,选择的方法很多,excel,txt或者数据库,看个人爱好
在这一节,我用我粗浅的数据库知识来搭建一个数据库存放上一节爬取到的代理ip,这里我用的是轻量级的sqlite数据库,没用过的童鞋可以pip装一个sqlite3库,然后到http://www.sqlite.org官网下载sqlite数据库哈,这是一个开源库,同时不用开端口,注册啥的,电脑里面也有很多用到sqlite储存信息的数据库,不过有个不方便就是操作比较麻烦,可以安装一个辅助工具来进行管理DB Browser for SQLite,下载地址是http://sqlitebrowser.org,也是开源的
关于sqlite3的这个库的运用,网上有很多帖子,我这里也有一个感觉讲的比较细的,大家可以看看https://www.runoob.com/sqlite/sqlite-python.html

好了废话不多说,进入主题,上一节我们主要搭建了爬取代码的类,这一节首先要调用这些类进行爬取,然后把爬取的内容储存到sqlite数据库中,先看代码
from crawler import Crawler
import sqlite3
import os
ippool='ip.sqlite'
class Getter():
    def __init__(self):
      self.crawler=Crawler()
      if not os.path.exists(ippool):
            self.conn=sqlite3.connect(ippool)
            self.c=self.conn.cursor()
            self.c.execute('''create table ips
            (ip CHAR(50) PRIMARY KEY NOT NULL,
            score INT NOT NULL);''')
            self.conn.commit()
      else:
            self.conn=sqlite3.connect(ippool)
            self.c=self.conn.cursor()
    def run(self):
      print('获取器开始执行')
      for callback_label in range(self.crawler.__CrawlFuncCount__):
            callback=self.crawler.__CrawlFunc__
            proxies=self.crawler.get_proxies(callback)
            for proxy in proxies:
                try:
                  self.c.execute("insert into ips (ip,score) values(?,?)",(proxy,10))
                  self.conn.commit()
                except:
                  self.conn.rollback()
      #self.conn.commit()
      self.conn.close()


这里主要讲一下关于调用上一节说到的调用爬取代码的部分,在上一节定义的ProxyMetaclass类中,不知道大家有没有注意到’__CrawlFuncCount__‘这个类属性,这个主要就是统计我们目前搭建的爬取代码块的数量,每个代码块对应一个代理网站,然后通过索引获得‘__CrawlFunc__’里面存放的每个方法的名字,通过调用Crawler类中的crawler.get_proxies(callback)实现自动爬取(忘了的童鞋可以回去看看第一节的内容)

获取到的代码,我们就需要写入到sqlite的数据库中,操作流程大体就是先创建数据库,然后写入表头并制定其格式(格式很重要,对日后读取数据库的内容有帮助),然后写入数据,这里写入也是类似写入缓存中,需要调用.commit()的方法写入内存才是真正的写入完成,详细的我就不赘述了,可以看看我上面提到的网址,里面介绍了很多sqlite3的用法。

好了第二部分就讲到这里了,感兴趣的童鞋可以继续前往第三部分批评指导哈 {:5_102:}

weiter 发表于 2020-5-5 21:40:00

考虑建个专辑不咯?

十月故里 发表于 2020-5-5 22:04:10

weiter 发表于 2020-5-5 21:40
考虑建个专辑不咯?

不会呀{:5_99:},不知道专辑怎么弄,所以就一个一个发帖子,而且太长了,只能拆成三个

zwhe 发表于 2020-5-29 10:20:16

{:10_245:}
页: [1]
查看完整版本: python3代理池的搭建(二)