Python 爬虫之Scrapy《下》

欢迎关注【无量测试之道】公众号,回复【领取资源】,
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、

资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。

今天这篇文章主要是分享两个技术点。
第一翻页数据如何处理;
第二构建一个db pipeline来获取数据并入库。

 

第一部分:翻页处理

在前面的文章中已经能够正常的提取我们想要的页面数据了,但是这只是一个页面想要的数据,如果是有很多页面的数据要处理,我们如何来爬取了。


page=1
start_urls=[] #这个是scrapy框架中定义好的,不可以修改
while (page < 7): #根据自身爬取的页面来定义
    print("the page is:", page)
    url = 'http://lab.scrapyd.cn/page/' + str(page) #对翻页的链接进行拼接
    start_urls.append(url) #追加到上面定义好的列表中去
    page += 1 #好让循环可以退出

def parse(self, response):
    items=LabItem()
    for sel in response.xpath('//div[@class="col-mb-12 col-8"]'):
        print(sel)
        for i in range(len(sel.xpath('//div[@class="quote post"]//span[@class="text"]/text()'))):
            title = sel.xpath('//div[@class="quote post"]//span[@class="text"]/text()')[i].get()
            author = sel.xpath('//div[@class="quote post"]//small[@class="author"]/text()')[i].get()
            items["title"]=title
            items["author"] = author
            yield items

源码中会不断的遍历start_urls这个列表里面的链接地址,并向这个列表里面的链接地址发出request请求,拿到response后再来解析页面数据,源码如下图所示:

 

第二部分:db pipeline 数据处理

Step1: 创建数据库与表,如下图所示

 

Step2: 创建sqlitePipeline类并配置setting.py文件


sqlitePipeline类代码如下:
class sqlitePipeline(object):

    def __init__(self):
        print("当爬虫执行开始的时候回调:open_spider")
        self.conn = sqlite3.connect("test.db")
        self.cur = self.conn.cursor()
        self.table='''
        create TABLE IF NOT EXISTS scrapy0725( 
         id  INTEGER   PRIMARY KEY AUTOINCREMENT,
            `author` varchar(255) DEFAULT NULL,
            `title` varchar(2000) DEFAULT NULL
         );
        '''
        self.cur.execute(self.table)


    def process_item(self, item, spider):
        print("开始处理每一条提取出来的数据==============")
        # content = json.dumps(dict(item),ensure_ascii=False)+"\n"
        content = dict(item)
        print("*" * 100)
        insert_sql="INSERT INTO scrapy0725 (author,title) VALUES ('"+str(content['author']).replace("'","")+"','"+str(content['title']).replace("'","")+"')"
        print(insert_sql)
        print("*"*100)
        self.cur.execute(insert_sql)
        self.conn.commit()
        print("*"*100)
        return item

    def close_spider(self, spider):
        sql = "select * from scrapy0725"
        result=self.cur.execute(sql)
        for res in result:
            print(res)
        self.cur.close()
        self.conn.close()
        print("当爬虫执行结束的时候回调:close_spider")

setting.py 配置如下:
ITEM_PIPELINES = {
   'lab.pipelines.sqlitePipeline':500,
   # 'lab.pipelines.FilePipeline': 300,
}

Step3: 执行此命令 scrapy crawl labs

Step4: 查询数据库是否insert成功,如下图所示:

总结:Python + Scrapy爬虫的文章暂时就分享到这里,Scrapy的爬虫效率还是不错的,大家动手开始实践吧。

备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

 添加关注,让我们一起共同成长!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wu_Candy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值