• Python 爬虫之Scrapy《下》


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

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

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

    第一部分:翻页处理

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

     1  
     2 page=1
     3 start_urls=[] #这个是scrapy框架中定义好的,不可以修改
     4 while (page < 7): #根据自身爬取的页面来定义
     5     print("the page is:", page)
     6     url = 'http://lab.scrapyd.cn/page/' + str(page) #对翻页的链接进行拼接
     7     start_urls.append(url) #追加到上面定义好的列表中去
     8     page += 1 #好让循环可以退出
     9  
    10 def parse(self, response):
    11     items=LabItem()
    12     for sel in response.xpath('//div[@class="col-mb-12 col-8"]'):
    13         print(sel)
    14         for i in range(len(sel.xpath('//div[@class="quote post"]//span[@class="text"]/text()'))):
    15             title = sel.xpath('//div[@class="quote post"]//span[@class="text"]/text()')[i].get()
    16             author = sel.xpath('//div[@class="quote post"]//small[@class="author"]/text()')[i].get()
    17             items["title"]=title
    18             items["author"] = author
    19             yield items

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

    第二部分:db pipeline 数据处理

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

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

     1  
     2 sqlitePipeline类代码如下:
     3 class sqlitePipeline(object):
     4  
     5     def __init__(self):
     6         print("当爬虫执行开始的时候回调:open_spider")
     7         self.conn = sqlite3.connect("test.db")
     8         self.cur = self.conn.cursor()
     9         self.table='''
    10         create TABLE IF NOT EXISTS scrapy0725( 
    11          id  INTEGER   PRIMARY KEY AUTOINCREMENT,
    12             `author` varchar(255) DEFAULT NULL,
    13             `title` varchar(2000) DEFAULT NULL
    14          );
    15         '''
    16         self.cur.execute(self.table)
    17  
    18  
    19     def process_item(self, item, spider):
    20         print("开始处理每一条提取出来的数据==============")
    21         # content = json.dumps(dict(item),ensure_ascii=False)+"
    "
    22         content = dict(item)
    23         print("*" * 100)
    24         insert_sql="INSERT INTO scrapy0725 (author,title) VALUES ('"+str(content['author']).replace("'","")+"','"+str(content['title']).replace("'","")+"')"
    25         print(insert_sql)
    26         print("*"*100)
    27         self.cur.execute(insert_sql)
    28         self.conn.commit()
    29         print("*"*100)
    30         return item
    31  
    32     def close_spider(self, spider):
    33         sql = "select * from scrapy0725"
    34         result=self.cur.execute(sql)
    35         for res in result:
    36             print(res)
    37         self.cur.close()
    38         self.conn.close()
    39         print("当爬虫执行结束的时候回调:close_spider")
    40  
    41 setting.py 配置如下:
    42 ITEM_PIPELINES = {
    43    'lab.pipelines.sqlitePipeline':500,
    44    # 'lab.pipelines.FilePipeline': 300,
    45 }

    Step3: 执行此命令 scrapy crawl labs

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

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

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

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

  • 相关阅读:
    Linux命令: 向文件写内容,编辑文件,保存文件,查看文件,不保存文件
    SQL: 左连接,右连接,内连接,左外连接,右外连接,完全连接
    Python: 没有switch-case语句
    Python:键盘输入input
    Python: 猴子分桃。海滩上有一堆桃子,五只猴子来分。
    error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools
    Scrapy安装
    Linux: 回到根目录cd /
    怎么查看是否安装Scrapy
    虚拟环境Scrapy安装
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/13572233.html
Copyright © 2020-2023  润新知