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

1.背景介绍

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

2.环境准备

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

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

    pip install scrapy
    
    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中定义好想要的字段,所有字段定义方式一致

    class BookItem(scrapy.Item):
    
    btitle = scrapy.Field()
    
    bimg = scrapy.Field()
    
    bsmma = scrapy.Field()
    
    bprice = scrapy.Field()

  2. 在爬取页面请求文件bookspider.py中的params中处理抓取到的页面

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

    `def parse(self,response):
    
    selector1 = Selector(response)

    2.1. path解析页面

    tr = selector1.css(".rept_detail tr:nth-of-type(n+2)")
    
    items = []
    
    for xi in tr:
    
    b = xi.css('td b::text').extract_first()
    
    img = xi.css('td img::attr(src)').extract_first()
    
    content = xi.css('td::text').extract()

    2.2 处理items中的字段

    item = BookItem()
    
    item['btitle'] = b
    
    item['bimg'] = img
    
    item['bsmma'] = content[1].split(':')[1]
    
    item['bprice'] = content[2].split(':')[1]
    
    item['bcbs'] = content[3].split(':')[1]
    
    item['bactor'] = content[4].split(':')[1]
    
    item['bgcbh'] = content[5].split(':')[1]
    
    item['bgcfl'] = content[6].split(':')[1]
    
    item['bztfl'] = content[7].split(':')[1]
    
    item['bcreatedate'] = content[8].split(':')[1]
    
    item['bgczt'] = content[9].split(':')[1]

    2.3 循环处理 item内容

    yield item

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

    if self.start <=91:
    
    self.start +=1
    
    else:
    
    break
    
    yield scrapy.Request('https://XXXX.com/bookadmin.php',callback=self.params, cookies=self.cookies,params=self.params, headers=self.headers)
    
    items.append(item)

4.管道传输

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

def process_item(self,item,spider):

print(self.connect)

cursor = self.connect.cursor()

insert_sql = '''

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")

'''

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']))`

cursor.close()

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python scrapy框架是Python中的一个优秀的爬虫框架。它专门用于爬取包含大量数据的网页,具有高效、稳定、易用的特点,可以很好地应用于各种数据挖掘、分析等领域。 使用Python scrapy框架爬取“房天下”网站房源数据,首先需要了解“房天下”网站的结构和网页的布局。可以利用浏览器开发工具查看网页源代码,找出房源数据的元素和标签,以便在 scrapy 代码中进行定位。 接着,需要创建一个 scrapy 项目,并编写 scrapy 爬虫代码。scrapy 爬虫程序一般包括爬虫程序、数据处理程序、数据存储程序等几个部分。在爬虫程序中,可以定义爬虫的启动页面、爬虫的操作逻辑和数据的提取方式。在数据处理程序中,可以进行数据清洗、去重、归类等处理。在数据存储程序中,可以将数据存储到数据库或文件中,方便后续的分析和使用。 在爬取“房天下”网站房源数据时,需要注意反爬虫措施。一般情况下,可以在请求头中添加一些随机值和Referer值等信息,模拟浏览器的正常访问行为,避免被网站屏蔽。同时,还可以设置下载延迟、禁用Cookie等措施,保证爬虫操作的正常性和连续性。 总的来说,利用Python scrapy框架爬取“房天下”网站房源数据,需要网站结构有深入的理解,并编写高效、稳定、规范的爬虫代码。只有这样才能大规模地爬取数据、处理数据和存储数据,获得数据挖掘和分析的收益。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值