scrapy集成selenium分布式爬虫---01

一. 创建一个scrapy项目

在这里插入图片描述

二. 在这个项目中创建一个爬虫文件

首先要cd到创建的项目,再执行下面的代码创建爬虫文件
在这里插入图片描述

在这里插入图片描述

三.分析网页

请添加图片描述

将地址放到爬虫文件的start_url中去
在这里插入图片描述

打印数据源码

请添加图片描述

可以看到我们并没有抓取到里面所有英雄的数据,说明这个网页存在一个懒加载,所以我们需要做一个页面加载的操作(利用selenium)

四.selenium懒加载

首先需要导入selenium驱动的包,创建一个初始化方法去实例化一个driver驱动对象
在这里插入图片描述
middlewares.py中间件文件中的requesr_response()方法里面实现懒加载
加载之前我们需要导入两个模块
在这里插入图片描述

在这里插入图片描述

request.url是我们发起请求的网页地址
spider.driver.execute_scrapt()是执行我们的js代码
sleep是为了等待一秒让网页数据通过selenium滚动后的数据加载出来
deta是获取的加载数据后的网页源码
HtmlResponse是将加载完后的网页响应对象返回给spider爬虫文件
spider.driver.current_url是数据加载后的网页地址
body 是加载数据后的网页数据源码
request是请求方式还是没有变的
encoding是我们网页的编码格式

在settings中开启我i们中间件的管道,使得响应对象传入到我们的spider文件中
在这里插入图片描述

请添加图片描述

可以看到我们的网页数据已经抓取到了

五.数据解析

在这里插入图片描述
请添加图片描述

提取到每个小li下面的a标签的href属性值,可以看到这个href的链接缺少了一个请求头

在这里插入图片描述
提取到详细页面链接之后利用yield生成器再次对详细页面链接发起请求,callback就是解析详细也买你链接需要的回调函数

抓取详细页面的皮肤图片和昵称(每一张皮肤都在一个li标签中)

请添加图片描述

在这里插入图片描述
在这里插入图片描述

这里获取的英雄的全名,为什么有none(拿海月看到)

在这里插入图片描述

我们有些英雄的全名是直接嵌套在h3标签内,而我们上面的代码却是在h3标签下还嵌套了一个span,所以此处我们要做个if判断

在这里插入图片描述
抓取英雄的技能以及技能的详细伤害
.在这里插入图片描述

这里做了一个异常捕获就是在爬取过程中会出现报错,如果某一个数据没有获取到而导致报错我们可以通过这个捕获快速找到原因

六.将数据持久化存储(以保存到mysql为例)

首先需要先在item.py文件中定义数据结构的字段

在这里插入图片描述

将item.py定义的数据结构类导入到我们的spider文件中,并且提交到pipelines管道

在这里插入图片描述
在这里插入图片描述
在settings.py中开启pipelines管道

在这里插入图片描述

可以在pipelines.py中输出一下item,如果看得到我们传书的数据说明数据通过管道传输过来了

在这里插入图片描述

保存到mysql之前可以先在MySQL可视化工具中创建一个数据库和数据表
在这里插入图片描述
做数据持久化存储在pipelines.py中

import pymysql


class WangzherongyaoHerosPipeline:
    def open_spider(self, spider):
        self.coon = pymysql.connect(host='127.0.0.1', port=3306, user='****', mima='******', charset='utf8',
                               database='wangzhe_heros')


    def process_item(self, item, spider):
        self.cursor = self.coon.cursor()  # 创建一个光标对象
        sql = '''insert into heros(full_name,nick_name,images,industrial) values(%s,%s,%s,%s)'''
        self.cursor.execute(sql,[item['full_name'],item['nick_name'],str(item['images']),str(item['industrial'])])
        self.coon.commit()
        return item

        # print(item)
    def close_spider(self,spider):
        self.cursor.close()
        self.coon.close()

这里的open_sipder()和close_spider()是我自己实例化的两个函数,因为,scrapy生成器是一条一条的提交过来的,然而我们连接数据库只需要连接一次,为了减少性能的耗费,我们只需要打开一次,可以在pipeline类中定义一个函数,close也是如此,其实你使用with open()的话就更能体现出实例这两个方法的必要性

运行scrapy项目,在mysql可视化工具中查看我们的数据
在这里插入图片描述

七.总结

本章集成了selenium和scrapy进行网页数据抓取,我们selenium的缺点是效率慢,中和scrapy的高效,会让我们抓取数据更快,也通过selenium解决了网页数据懒加载的问题,以及持久化存储(在scrapy中如何把数据保存到mysql中)

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
Selenium是一个自动化测试工具,可以用于模拟用户在Web浏览器中的操作。Selenium分布式是指将Selenium测试任务分配给多个计算机或节点来执行测试任务,以提高测试效率和速度。以下是Selenium分布式的实现方法: 1.使用Selenium Grid:Selenium Grid是Selenium的一个组件,可以将测试任务分配给多个计算机或节点来执行测试任务。它包括一个中心控制器和多个节点,可以在不同的操作系统和浏览器上运行测试任务。使用Selenium Grid需要先启动中心控制器,然后启动节点,最后将测试任务分配给节点执行。 2.使用第三方工具:除了Selenium Grid,还有一些第三方工具可以实现Selenium分布式,例如Zalenium、Selenoid等。这些工具可以自动化地管理Selenium节点,提供更好的性能和可扩展性。 下面是一个使用Selenium Grid实现分布式测试的示例: 1.启动中心控制器: ```shell java -jar selenium-server-standalone-3.141.59.jar -role hub ``` 2.启动节点: ```shell java -Dwebdriver.chrome.driver=chromedriver -jar selenium-server-standalone-3.141.59.jar -role node -hub http://localhost:4444/grid/register ``` 3.编写测试脚本: ```python from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities # 定义DesiredCapabilities capabilities = DesiredCapabilities.CHROME.copy() capabilities['platform'] = 'WINDOWS' # 连接到中心控制器 driver = webdriver.Remote( command_executor='http://localhost:4444/wd/hub', desired_capabilities=capabilities ) # 执行测试任务 driver.get('https://www.baidu.com') print(driver.title) # 关闭浏览器 driver.quit() ``` 4.运行测试脚本: ```shell python test.py ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Transcend oneself

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

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

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

打赏作者

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

抵扣说明:

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

余额充值