scrapy+flask+html打造搜索引擎的示例代码

目录
  • 1.预备知识
  • 2.抓取CSDN数据接口
    • 2.1 查看CSDN搜索引擎主页
    • 2.2测试CSDN搜索引擎的功能
    • 2.3查看更多相关文章的信息
    • 2.4抓取ajax异步请求数据
    • 2.5 分析url地址
  • 3. 使用scrapy爬取CSDN数据接口
    • 3.1 start_requests
    • 3.2使用parse函数提取数据
    • 3.3保存成CSV文件
    • 3.4 运行结果
  • 4. 效果展示
    • 4.1 flask后端展示
    • 4.2 效果展示

1.预备知识

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

2.抓取CSDN数据接口

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

2.1 查看CSDN搜索引擎主页

查看CSDN搜索引擎主页https://so.csdn.net/,截图如下:

2.2测试CSDN搜索引擎的功能

测试CSDN搜索引擎的功能,尝试输入参数之后,查看返回的文章信息列表,测试如下:

经过测试发现,CSDN搜索引擎的主要功能是,搜索所有跟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.csdn.net/api/v3/search?q=python&t=all&p=2
跟我们猜测的一样,q是代表查询,p是代表page,这样我们已经获取到CSDN引擎的核心API,我们可以通过这条API来实现搜索引擎的功能。
至此,抓包分析过程结束。

3. 使用scrapy爬取CSDN数据接口

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):
        # 这里是控制CSDN的文章类型
        input_text = input('请输入要爬取的CSDN类型:')
        # 是控制爬取文章页数
        for i in range(1,31):
            start_url = 'https://so.csdn.net/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 效果展示

点击搜索后:

左上角的搜索页面是入口页面。

好了,这样简易版的搜索引擎就搭建好了。更多相关scrapy+flask+html搜索引擎内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 在Python的Flask框架中实现全文搜索功能

     全文检索引擎入门 灰常不幸的是,关系型数据库对全文检索的支持没有被标准化.不同的数据库通过它们自己的方式来实现全文检索,而且SQLAlchemy在全文检索上也没有提供一个好的抽象. 我们现在使用SQLite作为我们的数据库,所以我们可以绕开SQLAlchemy而使用SQLite提供的工具来创建一个全文检索索引.但这么做不怎么好,因为如果有一天我们换用别的数据库,那么我们就得重写另一个数据库的全文检索方法. 所以我们的方案是,我们将让我们现有的数据库处理常规数据,然后我们创建一个专门的数据库来解

  • scrapy+flask+html打造搜索引擎的示例代码

    目录 1.预备知识 2.抓取CSDN数据接口 2.1 查看CSDN搜索引擎主页 2.2测试CSDN搜索引擎的功能 2.3查看更多相关文章的信息 2.4抓取ajax异步请求数据 2.5 分析url地址 3. 使用scrapy爬取CSDN数据接口 3.1 start_requests 3.2使用parse函数提取数据 3.3保存成CSV文件 3.4 运行结果 4. 效果展示 4.1 flask后端展示 4.2 效果展示 1.预备知识 python语言,scrapy爬虫基础,json模块,flask后

  • 使用scrapy ImagesPipeline爬取图片资源的示例代码

    这是一个使用scrapy的ImagesPipeline爬取下载图片的示例,生成的图片保存在爬虫的full文件夹里. scrapy startproject DoubanImgs cd DoubanImgs scrapy genspider download_douban  douban.com vim spiders/download_douban.py # coding=utf-8 from scrapy.spiders import Spider import re from scrapy

  • Mysql实现简易版搜索引擎的示例代码

    目录 前言 简介 ngram 全文解析器 创建全文索引 检索方式 1.自然语言检索(NATURAL LANGUAGE MODE) 2.布尔检索(BOOLEAN MODE) 与 Like 对比 总结 前言 前段时间,因为项目需求,需要根据关键词搜索聊天记录,这不就是一个搜索引擎的功能吗? 于是我第一时间想到的就是 ElasticSearch 分布式搜索引擎,但是由于一些原因,公司的服务器资源比较紧张,没有额外的机器去部署一套 ElasticSearch 服务,而且上线时间也比较紧张,数据量也不大,

  • Python+Flask实现自定义分页的示例代码

    目录 前言 后端 后端思路 后端代码 前端 前端思路 前端代码 前言 分页操作在web开发中几乎是必不可少的,而我们的flask不像django自带封装好的分页操作,要分页则需要依赖flask-sqlalchemy中的分页查询,但是分页这么重要且简单的操作,自己实现必须要会这个思维,我也在网上看了一些,但大体上不合我意,因此这篇我带大家手写一个分页操作! 后端 后端思路 写这个分页操作前我们首先要思考我们需要什么?我们需要将我们需要的东西封装到一个字典里,然后传给前端!那么这里我先说分页算法,很

  • Android开发使用WebView打造web app示例代码

    目录 前言 代码如下 前言 博主最近想做一款app,因为内容已经有了,故想到了使用WebView来做 ,现将代码贴出如下,供有同样需求的人参考,少走弯路 代码如下 public class MainActivity extends Activity{ private WebView webview; private Handler handler; private ProgressDialog pd; @Override public void onCreate(Bundle savedInst

  • flask 实现token机制的示例代码

    token 的生成 用token校验身份,是前后端交互的常用方式. 它有以下特性: 会失效 加密 可以根据它拿到用户的信息 生成方式( 内部配置的私钥+有效期+用户的id ) #导入依赖包 from flask import request,jsonify,current_app from itsdangerous import TimedJSONWebSignatureSerializer as Serializer def create_token(api_user): ''' 生成toke

  • Scrapy实现模拟登录的示例代码

    为什么要模拟登录 有些网站是需要登录之后才能访问的,即便是同一个网站,在用户登录前后页面所展示的内容也可能会大不相同,例如,未登录时访问Github首页将会是以下的注册页面: 然而,登录后访问Github首页将包含如下页面内容: 如果我们要爬取的是一些需要登录之后才能访问的页面数据就需要模拟登录了.通常我们都是利用的 Cookies 来实现模拟登录,在Scrapy中,模拟登陆网站一般有如下两种实现方式:            (1) 请求时携带Cookies            (2) 发送P

  • es+flask搜索小项目实现分页+高亮的示例代码

    环境 前端:html,css,js,jQuery,bootstrap 后端:flask 搜索引擎:elasticsearch 数据源:某某之家 项目展示 项目目录 主要源码 获取数据源并写入es from lxml import etree from concurrent.futures import ThreadPoolExecutor from elasticsearch import Elasticsearch from elasticsearch import helpers impor

  • Python Flask基础教程示例代码

    本文研究的主要是Python Flask基础教程,具体介绍如下. 安装:pip install flask即可 一个简单的Flask from flask import Flask #导入Flask app = Flask(__name__) #创建一个Flask实例 #设置路由,即url @app.route('/') #url对应的函数 def hello_world(): #返回的页面 return 'Hello World!' #这个不是作为模块导入的时候运行,比如这个文件为aa.py,

  • Flask解决跨域的问题示例代码

    跨域文件上传的时候,浏览器会自动发起一个 OPTIONS 方法到服务器,现在后台解决前端跨域解决前端跨域请求的问题 客户端发起的这个 OPTIONS 可以说是一个"预请求",用于探测后续真正需要发起的跨域 POST 请求对于服务器来说是否是安全可接受的,因为跨域提交数据对于服务器来说可能存在很大的安全问题 请求头 Access-Control-Request-Method 用于提醒服务器在接下来的请求中将会使用什么样的方法来发起请求 Access-Control-Allow-Metho

随机推荐