• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

**python 的scrapy架构 爬取需要登录的网站的多个页面并导入数据库**

武飞扬头像
3文丰
帮助1

1.背景介绍

我因为书店的藏书都放在供应商的库上,所以就想把在别人系统上我这边的藏书书单拿出来上线到我的系统中,自己进行维护,所以就直接上手去爬取数据,同时存储到我本地的MySQL库

2.环境准备

  • 首先安装python,不再详述,直接百度在搜索框中输入“python 安装教程”按步骤进行即可

  • 安装scrapy 、pymysql包,直接在命令行中输入

    1.  
      pip install scrapy
    2.  
       
    3.  
      pip install pymysql
  • 新建一个项目

    scrapy startproject myspider

    生成如下图所示目录树

  • 学新通

  • 创建一个爬虫文件,可以用如下代码快速生成文件和初始代码

    scrapy genspider itcast "bookspider.cn"
  • 在爬虫文件中发送请求并获取响应,首先需要获取到登录的cookie和headers,操作方式如下

    打开网页,进入到“开发者工具”界面,如下操

  • 学新通

  • 进入Convert curl commands to code 进行对应转换

  • 生成如下结果,写到bookspider.py文件中

  • 学新通

3.获取item内容

  1. 首先在items.py中定义好想要的字段,所有字段定义方式一致

    1.  
      class BookItem(scrapy.Item):
    2.  
       
    3.  
      btitle = scrapy.Field()
    4.  
       
    5.  
      bimg = scrapy.Field()
    6.  
       
    7.  
      bsmma = scrapy.Field()
    8.  
       
    9.  
      bprice = scrapy.Field()
  2. 在爬取页面请求文件bookspider.py中的params中处理抓取到的页面

    其中parse是scrapy处理请求固定的函数

    1.  
      `def parse(self,response):
    2.  
       
    3.  
      selector1 = Selector(response)

    2.1. path解析页面

    1.  
      tr = selector1.css(".rept_detail tr:nth-of-type(n 2)")
    2.  
       
    3.  
      items = []
    4.  
       
    5.  
      for xi in tr:
    6.  
       
    7.  
      b = xi.css('td b::text').extract_first()
    8.  
       
    9.  
      img = xi.css('td img::attr(src)').extract_first()
    10.  
       
    11.  
      content = xi.css('td::text').extract()

    2.2 处理items中的字段

    1.  
      item = BookItem()
    2.  
       
    3.  
      item['btitle'] = b
    4.  
       
    5.  
      item['bimg'] = img
    6.  
       
    7.  
      item['bsmma'] = content[1].split(':')[1]
    8.  
       
    9.  
      item['bprice'] = content[2].split(':')[1]
    10.  
       
    11.  
      item['bcbs'] = content[3].split(':')[1]
    12.  
       
    13.  
      item['bactor'] = content[4].split(':')[1]
    14.  
       
    15.  
      item['bgcbh'] = content[5].split(':')[1]
    16.  
       
    17.  
      item['bgcfl'] = content[6].split(':')[1]
    18.  
       
    19.  
      item['bztfl'] = content[7].split(':')[1]
    20.  
       
    21.  
      item['bcreatedate'] = content[8].split(':')[1]
    22.  
       
    23.  
      item['bgczt'] = content[9].split(':')[1]
    学新通

    2.3 循环处理 item内容

    yield item

    2.4 循环请求所有的页,直到结束

    1.  
      if self.start <=91:
    2.  
       
    3.  
      self.start =1
    4.  
       
    5.  
      else:
    6.  
       
    7.  
      break
    8.  
       
    9.  
      yield scrapy.Request('https://XXXX.com/bookadmin.php',callback=self.params, cookies=self.cookies,params=self.params, headers=self.headers)
    10.  
       
    11.  
      items.append(item)

4.管道传输

直接在pipelines.py中连接数据库,编写SQL导入到数据库即可

  1.  
    def process_item(self,item,spider):
  2.  
     
  3.  
    print(self.connect)
  4.  
     
  5.  
    cursor = self.connect.cursor()
  6.  
     
  7.  
    insert_sql = '''
  8.  
     
  9.  
    insert into book_manage(btitle ,bimg ,bsmma,bprice,bpublisher,bactor,bgcbh,bgcfl,bztfl,bcreatedate ,bgczt ,bupdatetime) values("%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s")
  10.  
     
  11.  
    '''
  12.  
     
  13.  
    cursor.execute(insert_sql%(item['btitle'] ,item['bimg'] ,item['bsmma'] ,item['bprice'] ,item['bcbs'] ,item['bactor'] ,item['bgcbh'] ,item['bgcfl'] ,item['bztfl'],item['bcreatedate'],item['bgczt'],item['bupdatetime']))`
  14.  
     
  15.  
    cursor.close()
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgahbge
系列文章
更多 icon
同类精品
更多 icon
继续加载