IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 网络数据爬虫(scrapy+selenium)实现页面跳转及文件/附件下载 -> 正文阅读

[开发测试]网络数据爬虫(scrapy+selenium)实现页面跳转及文件/附件下载

一、基于scrapy的基本架构搭建(往期博文中已有基本介绍:https://blog.csdn.net/csl136520054/article/details/118902880)

二、selenium实现自动跳转“下一页”:
1、selenium简介:
一种自动化测试工具,可以模拟人来操作浏览器,需要浏览器页面加载完成才能操作,对网速要求严格,可以用于重复性的操作。
2、需求:爬取条目过多,存在页面跳转,故利用selenium模拟点击并实现跳转
3、准备:
(1)根据自己系统平台信息,下载对应的浏览器驱动(https://chromedriver.storage.googleapis.com/index.html),如我自己的Windows平台,谷歌浏览器版本信息:
在这里插入图片描述
(2)环境变量配置
下载完成后,将ChromeDriver.exe可执行文件路径配置到系统环境变量下
在Windows下,建议直接将chromedriver.exe文件放到Python的Scripts目录下或selenium所在路径,如下图所示:
在这里插入图片描述
(3)pip install selenuim 按装selenium模块并引入驱动:

from selenium import webdriver

driver = webdriver.Chrome(executable_path="D:\\chromedriver_win32\\chromedriver.exe")

3、自动翻页代码实现:
定位“下一页”元素并实现自动点击跳转:
在这里插入图片描述
tips!可能出现的问题:Message: stale element reference: element is not attached to the page document 根本原因:爬取的时候,获取过于频繁,需要在每次获取完成翻页后强制sleep几秒。

三、利用scrapy自带文件下载功能实现附件下载:
1、需求:爬取信息存在附件需要进行下载
2、方法:Scrapy提供了FilesPipeline实现文件下载,FilesPipeline使用时通过item的一个指定字段(如:file_urls)将要下载的文件或图片的url传递给它,它便会自动将文件或图片下载到本地。
3、代码实现:
(1)第一步:在配置文件settings.py中启用FilesPipeline并设置文件下载路径

ITEM_PIPELINES = {
   'zrzyPolicies.pipelines.ZrzypoliciesPipeline': 300,
   'zrzyPolicies.pipelines.MyFilesPipeline':1
}

FILES_STORE = 'F:/Download'
FILES_URLS_FIELD = 'file_urls'
MEDIA_ALLOW_REDIRECTS = True

(2)在item.py中定义file_urls和files两个字段,分别存放待下载文件地址和对应文件名称列表(因为可能一条记录对应有对个待下载附件,所以用列表存储)

file_urls = scrapy.Field()
files = scrapy.Field()

(3)pipelines.py文件修改,重写FilesPipeline,实现文件下载及保存:

# 定义文件下载类
class MyFilesPipeline(FilesPipeline):  #在scrapy自带FilesPipeline的基础上创建自己的pipeline
#通过item获取具体的文件地址和文件名称信息,根据自己对item的设置,具体实现可能有所不同
    def get_media_requests(self, item, info):
        if len(item['file_urls'])>2:
            urls = item['file_urls'].split(';')
            names = item['files'].split(';')
            for i in range(len(urls)):
                file_url = urls[i]
                file_name = names[i]
                yield scrapy.Request(file_url, meta={'file_name': file_name})

#设置文件保存路径及文件名
    def file_path(self, request, response=None, info=None):
        file_name = request.meta['file_name']
        return 'zrzy/%s' % (file_name)

(4)主爬虫文件spider.py中相关部分实现:

contList = response.xpath("//div[@class ='article-content']/p[contains(@style,'margin-bottom')]") 
# 可能有多个附件,放到一个列表中
file_list = []
nameList =[]
for fujianUrl in contList:
	f_list = fujianUrl.css("a::attr(href)").get()
	if isinstance(f_list,str):
		file_list.append("http:" + f_list)
		fName = fujianUrl.xpath("string(.//a)").extract()[0]
		nameList.append(fName)

item['file_urls'] = ';'.join(file_list)
item['files'] = ';'.join(nameList)
yield item

完整代码地址:
https://github.com/Chenshunli/policiesSpider

参考链接:
https://blog.csdn.net/weixin_36279318/article/details/79475388
https://www.cnblogs.com/mayyan/p/10062869.html
https://blog.csdn.net/xiaogeldx/article/details/104205651

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 16:20:21  更:2022-04-06 16:21:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 1:37:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码