scrapy+flask+html打造搜索引擎

如何整合Flask&Scrapy? 文章来源:如何整合Flask&Scrapy? - 代码领悟code05.com提问:如何整合Flask&Scrapy?我正在使用scrapy来获取数据,我想使用flask web框架在网页中显示结果。 但不知道如何调用flask应用程序中的蜘蛛。 我已经尝试使用CrawlerProcess来调用我的蜘蛛,但我得到了这样的错误: ValueError ValueError: signal only works in main thread Traceback (most recent cal 阅读详情

简易版搜索引擎,当时随便写的代码,不喜勿喷

1.预备知识

python语言,scrapy爬虫基础,json模块,flask后端

2.抓取优快云数据接口

使用谷歌抓包工具抓取优快云搜索引擎的接口

2.1 查看优快云搜索引擎主页

查看优快云搜索引擎主页https://so.youkuaiyun.com/,截图如下:
在这里插入图片描述

2.2测试优快云搜索引擎的功能

测试优快云搜索引擎的功能,尝试输入参数之后,查看返回的文章信息列表,测试如下:
在这里插入图片描述
经过测试发现,优快云搜索引擎的主要功能是,搜索所有跟python有关的文章,然后根据文章热度,点赞量,留言数进行一个综合排序,展示给用户排序后的文章结果。这样来说,我们的主要任务就是利用抓包抓取到前后端传输数据的接口,通过接口,来实现整个搜索引擎的效果。

2.3查看更多相关文章的信息

让我们把前端滑轮移到最后,发现并没有页数的标签,而是通过自动加载数据来呈现,效果如下:
在这里插入图片描述
在这里插入图片描述
在不刷新整个页面的基础上加载新的数据,这很容易让我们联想到ajax异步请求。
异步请求通常就是利用ajax技术,能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变的信息。
接下来我们尝试利用谷歌浏览器抓取异步请求的信息。

2.4抓取ajax异步请求数据

使用谷歌浏览器抓取ajax异步请求数据
为了避免干扰因素,我们在抓包前需要点击clear按钮,清空当前的抓包记录
在这里插入图片描述
将滑块移动到最后,使前端页面自动加载数据,分析数据加载时抓取到的数据包信息。通过多次分析验证,发现结果有一个get请求携带着大量的刷新时的数据。如下图所示:
在这里插入图片描述
是JSON格式的数据,这里简单介绍一下JSON格式的数据。
JSON 是前后端传输数据最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。
通过分析,我们可以发现数据是存放在result_vos列表下的各个字典中的,我们可以使用循环,然后通过dict[“xxx”]的方式来提取数据。

2.5 分析url地址

在这里插入图片描述
我们发现这个GET请求携带了大量的未知参数,通过经验分析,以及英语首字母,我们可以猜测P是page(页),Q是query(查询)的意思,其他xxx=-1应该是默认值,我们暂时按照这个猜测进行删减参数。
测试结果截图:

在这里插入图片描述
通过测试,发现猜测正确,只保留了q、t、p三个参数,依然可以访问到传输的数据内容(事实上,这里t参数也可以删除,同学们可以自行测试)
这样,这条url对应的重要参数都分析出来了,链接如下:
https://so.youkuaiyun.com/api/v3/search?q=python&t=all&p=2
跟我们猜测的一样,q是代表查询,p是代表page,这样我们已经获取到优快云引擎的核心API,我们可以通过这条API来实现搜索引擎的功能。
至此,抓包分析过程结束。

3. 使用scrapy爬取优快云数据接口

3.1 start_requests

使用start_requests函数进行构造20页的url列表。
这里start_requests方法必须返回一个可迭代对象(iterable)。该对象包含了spider用于抓取的第一个Request。
当spider开始抓取并且未指定start_urls时,该方法将会被调用。该方法仅仅会被scrapy调用一次,因此可以将其实现为url生成器。
使用scrapy.Request可以发送一个GET请求,传送到指定的函数进行处理。
详细代码操作如下:
 # 重写start_urls的方法
    def start_requests(self):
        # 这里是控制优快云的文章类型
        input_text = input('请输入要爬取的优快云类型:')
        # 是控制爬取文章页数
        for i in range(1,31):
            start_url = 'https://so.youkuaiyun.com/api/v3/search?q={}&p={}'.format(input_text,i)
            yield scrapy.Request(
                url=start_url,
                callback=self.parse
            )

3.2使用parse函数提取数据

   这里需要掌握几个重要的方法应用

response.text 请求返回的响应的字符串格式的数据
json.loads() loads方法是将str转化为dict格式数据
json.dumps() dumps方法是将dict格式的数据转化为str
具体代码操作如下:
data_dict = json.loads(response.text)
使用循环遍历json数据中的各个具体直播间数据的信息,新建一个item字典进行数据存储,然后使用yield传递给引擎进行相应的处理
代码操作如下:

def parse(self, response):
   # response.request.headers
   print(response.request.headers)
   data_dict = json.loads(response.text)
    for data in data_dict['result_vos']:
            item = {}
         # 标题
         item['title'] = data['title'].replace('<em>','').replace('</em>','')
         # 作者
         item['author_label'] = data['nickname']
         # 浏览量
         item['view'] = data['view']
         # 点赞量
         item['zan'] = data['digg']
         # 地址链接
         item['link_url'] = data['url']

3.3保存成CSV文件

import csv
定义csv文件需要的列标题
headers = ['title','author_label','view','zan','jianjie' ,'link_url']
每次调用pipline的时候,都会运行一遍
class Day02Pipeline:
    def process_item(self, item, spider):
        文件默认保存到当前目录下的douyu.csv中
这里a是追加操作
        with open('csdn.csv', 'a', encoding='utf-8', newline='') as fa:
            保存headers规定的列名内容
            writer = csv.DictWriter(fa, headers)
            writer.writerow(item)
            print(item)
      return item

3.4 运行结果

最后,我们来查看一下运行结果,以及保存好的csv文件
终端运行结果如下:
在这里插入图片描述
在这里插入图片描述
至此,爬虫实验结束。

4. 效果展示

4.1 flask后端展示

搭建过程略
(入门级搭建,没有用企业级开发流程,后期可以考虑出flask的教程)
展示结构如下:
在这里插入图片描述
flask入门可自行百度

4.2 效果展示

在这里插入图片描述
点击搜索后:
在这里插入图片描述
左上角的搜索页面是入口页面。

好了,这样简易版的搜索引擎就搭建好了。
目前没有github,正在考虑要不要整一个
需要代码的留言吧

python基础flask——爬虫与flask联调 困于心衡于虑而后作 今天的学习目标是,实现flask与爬虫联调,自己写网页服务器,然后写爬虫进行爬取内容 首先是先写flask服务 1.创建html文件 首先在当前文件夹内创建helloword.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>hello word</title> </head> <bo 阅读详情

相关推荐

Python爬虫实战:从Requests到Scrapy的完整环境搭建与反爬策略

网络数据采集是自动化获取互联网公开信息的基础技术,其核心原理是通过模拟HTTP请求与解析HTML/XML文档来提取结构化数据。这项技术的工程价值在于将人工浏览和复制数据的重复劳动自动化,显著提升数据获取效率与规模。在数据分析、市场研究、内容聚合和竞品监控等应用场景中,数据采集是构建数据管道的关键环节。本文聚焦于Python爬虫的实战可用性,详细阐述了如何搭建包含Requests、BeautifulSoup、Selenium和Scrapy的完整技术栈环境,并系统介绍了应对反爬机制的策略,如IP代理池管理和请求

weixin_33851177的博客 351

Flask 连接 Scrapy 爬虫详解

Flask 连接 Scrapy 爬虫详解

小猿 1694

从BTS内容误推看技术社区信息过滤:正则表达式与Python爬虫实战

在信息爆炸的时代,内容识别与信息过滤是提升开发者效率的核心技术。其原理基于特征提取与分类模型,通过分析文本、元数据等特征实现内容归类。这项技术的价值在于帮助开发者从海量信息中精准获取所需,减少噪音干扰,提升学习与工作效率。应用场景广泛,包括技术社区内容筛选、个性化推荐系统构建等。本文以正则表达式和Python爬虫为例,通过构建自动化过滤器,演示如何从技术博客中识别并过滤非技术内容,如BTS相关娱乐信息,实现个人化信息流优化。

weixin_33984032的博客 386

关于Flask框架中启动Scrapy爬虫框架时的几种问题的解决

Flask结合Scrapy的使用时遇到的几个问题 一、Scrapy 1.7.1 - no active project Unknown command: crawl Use "scrapy" to see 二、ValueError: signal only works in main thread 三、subprocess.CalledProcessError: Command...returne non-zero exit status 2. 四、接口阻塞等待爬虫运行

流夏_ 4666

Python副业变现实战:从技能到接单的完整路径拆解

Python作为一门通用编程语言,其核心价值在于将技术能力转化为解决实际问题的生产力。从技术原理上看,Python凭借简洁的语法和丰富的库生态,能够高效处理数据采集、自动化办公、Web开发等常见工程需求。掌握requests、pandas、Flask等核心库,意味着具备了将业务逻辑转化为自动化解决方案的基础能力。这种能力在当下的技术市场中具有广泛的应用场景,尤其在数据采集与处理、办公自动化、数据分析可视化等领域需求旺盛。对于开发者而言,将Python技能与具体应用场景结合,不仅能提升工程实践水平,更能开辟副

weixin_34032621的博客 426

开源网盘聚合搜索引擎:API集成、调度与缓存优化实战

在分布式系统与搜索引擎技术领域,API集成与数据聚合是解决信息孤岛、提升检索效率的核心方案。其原理在于通过标准化的应用程序接口,将来自不同数据源的异构信息进行统一采集、清洗与整合,最终为用户提供一站式查询服务。这项技术的工程价值在于,它避免了传统通用爬虫的高维护成本和法律风险,通过结构化的数据交换实现了更高的稳定性与精准度。典型的应用场景包括垂直领域的资源检索、价格监控以及跨平台内容发现。本文以网盘资源搜索为例,深入剖析了如何利用API适配器与调度中心构建一个高效的聚合引擎,并重点探讨了使用Redis实现多

weixin_30463341的博客 432

flask+scrapy

您可以使用它来获取随机的浏览器、操作系统和设备类型等信息,或者从预定义的用户代理池中选择特定类型的用户代理。在SDS中,buf数组的长度不一定就是字符串的字符数量加一,buf数组里面可以包含未使用的字节,而这些未使用的字节由free属性记录。Redis提供的数据类型主要分为5种自有类型和一种自定义类型,这5种自有类型包括:String类型、哈希类型、列表类型、集合类型和顺序集合类型。fake_useragent库的主要功能是生成随机的用户代理字符串,以模拟不同类型的浏览器、设备和操作系统的请求。

憨豆婆的博客 1026

gRPC之gRPC开发流程与入门案例

gRPC之gRPC开发流程与入门案例

YIYIYI 3757

爬虫教程( 2 ) --- scrapy 教程、可视化管理工具、反爬框架、ai 爬虫

scrapy 教程、可视化管理工具、反爬框架、ai 爬虫

freeking101的博客 5252

usb gadget uvc driver的code分析

uvc的linux driver分为host侧和gadget侧两个driver。host侧的driver在v4l2框架下,而设备侧的driver在usb/gadget文件夹下。gadget侧的uvc driver,利用v4l2框架去注册video_device,向应用层提供调用接口。同时,它完成v4l2 video buffer拷贝到usb request下的buffer下,然后利用uvc实现的协

lintwins的专栏 1万+

Case-Based Reasoning用于RAG

在做大模型应用RAG的时候,会发现一种特殊的场景,就是基于之前的case进行回答,比如法律咨询、医疗诊断等等。这种情况的问答,需要有强有力的case支持才行,有了case支持,大模型回答会更加准确。CBR这个概念已经很久了,它是一种人工智能推理方法,它的基本思想是:遇到新问题时,先回忆相似的过去案例,再基于这些案例进行调整,得到新问题的解答。Retrieve(检索):在案例库中找到与当前问题最相似的案例。Reuse(复用):借鉴案例的解决方案来应对当前问题。

sinat_28694519的博客 938

Python零基础到就业:构建最小可行知识体系的实战路线图

在编程学习领域,Python因其简洁语法和丰富生态成为热门选择。其核心原理在于通过解释器执行代码,结合强大的第三方库生态解决实际问题。掌握Python不仅能提升自动化效率,更是进入数据分析、Web开发等领域的敲门砖。从技术价值看,Python降低了编程门槛,但其真正的工程价值体现在构建可维护、可扩展的应用系统。在应用场景上,Python广泛用于Web后端开发、数据科学分析、自动化脚本及人工智能研究。本文聚焦Python学习路径规划,针对初学者常陷入的“教程收藏陷阱”,提出构建“最小可行知识体系”的核心理念,

weixin_34034670的博客 438

Wezterm的安装和简单配置

希望 wezterm 的主题配色,保持和 powershell 默认配色一致,也就是 Compell 主题。目的是在频繁使用 wezterm 时,原本的根据颜色判断文件信息(尤其是WSL里的Linux下,文件和目录颜色)依然可以使用。wezterm 默认用 cmd.exe, 我是 win11,希望默认用 powershell。

baiyu33的博客 4267

chatgpt赋能python:Python扩展库:插上翅膀飞翔

本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。

atest166的博客 133

Zabbix在Ubuntu 22.04上的性能优化与监控实战:从基础安装到高级配置

本文详细介绍了在Ubuntu 22.04系统上部署和优化Zabbix监控系统的完整流程,从基础安装到高级配置。内容包括MySQL数据库设置、Zabbix服务器与Web前端优化、性能调优策略以及实战监控场景应用,帮助用户构建高效的企业级监控解决方案。

sss66的博客 894

生信分析服务MR孟德尔随机化单细胞测序转录组数据分析网络药理学

通过上述技术整合,可实现从基因-环境-疾病关联到药物机制解析的全链条研究,为疾病机制解析和药物研发提供新思路。结合,是当前生物信息学领域的前沿方法,尤其在疾病机制解析、靶点发现和药物研发中展现出巨大潜力。

matlabgoodboy的博客 1520

chatgpt赋能python:Python在Web前端的应用和优势

本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。

boRRjxBZRf的博客 278

群晖存储空间损毁不等于硬盘损坏:排查与修复实战

NAS存储系统中,物理硬盘、存储池与文件系统空间构成层级结构,任何一层出现异常都可能在管理界面汇总为“存储空间损毁”。事实上,异常断电、卷未正常挂载等软性问题也会触发这一红色告警,而存储池和硬盘SMART状态往往完全正常。理解这一机制后,用户无需急于格式化重建,通过事件日志审查、SSH确认挂载状态,再借助btrfs scrub等文件系统自愈工具,即可在数据不丢失的前提下恢复存储空间正常。该方案对家庭及小型办公环境中的群晖NAS尤其适用,特别是在供电不稳或硬盘休眠频繁的场景下,能有效规避误判风险。本文完整记录

weixin_30843121的博客 261

Python零基础到就业全栈教程:300集爬虫数据分析实战指南

Python作为一门广泛应用于数据科学、自动化脚本和Web开发的高级编程语言,其核心优势在于简洁的语法和强大的生态系统。理解Python编程的基本原理,如变量、函数、面向对象和模块化设计,是构建复杂应用的基础。掌握这些基础后,其技术价值在于能够高效处理数据、连接网络服务并实现业务流程自动化。在应用场景上,Python特别适用于网络爬虫进行数据采集,以及利用数据分析库进行数据清洗、统计和可视化,从而驱动业务决策。本教程正是围绕Python基础、网络爬虫和数据分析这三大核心模块,提供了一套从零开始的系统性学习路

weixin_33726318的博客 432

STM32开发实战--解决STM32CubeMX生成代码时钟初始化卡死问题

本文详细分析了STM32CubeMX生成代码在时钟初始化阶段卡死的问题,提供了多种解决方案,包括简单修改和稳健的等待机制。通过深入探讨HAL库的时钟初始化陷阱及硬件层面的根本原因,帮助开发者快速定位并解决STM32开发中的常见问题。

weixin_26965807的博客 439

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Python零基础到就业:600集教程实战拆解与学习路径规划

Python作为当下最热门的编程语言之一,其核心价值在于简洁的语法和强大的生态库,能够高效处理数据分析、网络爬虫、自动化脚本等任务。理解Python的工作原理,从环境配置、基础语法到面向对象编程,是构建扎实编程思维的基础。掌握requests、pandas等关键库的使用,能显著提升数据处理与信息获取的工程效率。在数据分析与网络爬虫等高频应用场景中,Python通过结合NumPy、BeautifulSoup等工具,实现了从数据采集、清洗到可视化分析的完整链路。本文聚焦于一套600集的Python零基础教程,深

weixin_30781107的博客 307

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Python全套教程从入门到精通,内含超多实战项目等

Python全套教程从入门到精通,内含超多实战项目等

擅自各种语言算法!欢迎咨询! 1563

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Python学习避坑指南:从零基础到工程实践的系统路径

编程语言学习是掌握现代信息技术的基础,其核心在于理解计算机如何执行指令并处理数据。Python作为一种解释型、高级通用语言,因其语法简洁、生态丰富,在数据分析、Web开发、自动化脚本及人工智能等领域广泛应用。学习编程的真正价值在于将逻辑思维转化为解决实际问题的能力,而非单纯记忆语法。有效的学习路径应遵循从环境搭建、核心语法掌握,到面向特定领域工具化实践,最终迈向工程化的过程。这一过程中,实践项目与问题排查能力至关重要,它们能帮助学习者跨越从‘知道’到‘做到’的鸿沟。本文以Python学习为例,探讨如何构建清

快马扬鞭须努力! 452

Python 学习 ---> 模块、pypi ( 模块库 )、添加模块路径

什么是 模块 在 Python 中,一个.py文件就是一个模块(Module)。模块的名字就是文件的名字。在模块内部,通过全局变量__name__可以获取模块名(即字符串) 模块作用 为了实现代码的复用,通常会把一些其他程序中重用的代码拿出来单独放在一个程序文件中,

freeking101的博客 3483

Python学习避坑指南:从零基础到项目实战的高效路径规划

在编程学习领域,构建高效的学习路径是每位初学者面临的核心挑战。学习路径规划的本质在于识别知识体系中的关键节点,通过结构化设计实现从理论到实践的平滑过渡。其技术价值体现在缩短学习曲线、提升知识留存率,并最终转化为解决实际问题的工程能力。在Python等动态语言的学习中,这一原理尤为重要,因为其生态庞大且快速迭代。项目驱动式学习作为核心方法论,通过将抽象概念与具体应用场景结合,帮助学习者建立最小可行知识体系,避免陷入资源过载的困境。本文围绕Python爬虫、数据分析、Web开发等热门方向,拆解如何通过四阶段学习

weixin_30615767的博客 377

Python零基础到项目实战:500集系统教程学习路径与避坑指南

Python作为一门简洁高效的编程语言,其核心在于通过清晰的语法和强大的生态库解决实际问题。理解Python的变量、函数、面向对象等基础概念,是掌握其编程思想的第一步。从环境配置开始,使用pip管理依赖和虚拟环境隔离项目,这些工程实践能有效提升开发效率。Python的技术价值在于其广泛的应用场景,如数据分析、Web开发和自动化脚本,能够帮助开发者快速构建解决方案。对于零基础学习者,一套系统性的教程至关重要,它能将Python安装、核心语法、第三方库和项目实战串联成完整的学习闭环,避免碎片化学习。本文基于Py

weixin_33985507的博客 373
上一篇: [2021.7]猿人学 | 爬虫攻防大赛 | 第四题
下一篇: 爬取招聘数据 | scrapy 前程无忧51job
lijiamingccc
博客等级 码龄5年 7091粉丝 97原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

lijiamingccc

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

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

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

打赏作者

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

抵扣说明:

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

余额充值