最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年07月25日 15:46:44   作者:努力的蝸牛_沖沖  
本文主要介紹了scrapy+flask+html打造搜索引擎的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

1.預(yù)備知識

python語言,scrapy爬蟲基礎(chǔ),json模塊,flask后端

2.抓取CSDN數(shù)據(jù)接口

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

2.1 查看CSDN搜索引擎主頁

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

在這里插入圖片描述

2.2測試CSDN搜索引擎的功能

測試CSDN搜索引擎的功能,嘗試輸入?yún)?shù)之后,查看返回的文章信息列表,測試如下:

在這里插入圖片描述

經(jīng)過測試發(fā)現(xiàn),CSDN搜索引擎的主要功能是,搜索所有跟python有關(guān)的文章,然后根據(jù)文章熱度,點贊量,留言數(shù)進行一個綜合排序,展示給用戶排序后的文章結(jié)果。這樣來說,我們的主要任務(wù)就是利用抓包抓取到前后端傳輸數(shù)據(jù)的接口,通過接口,來實現(xiàn)整個搜索引擎的效果。

2.3查看更多相關(guān)文章的信息

讓我們把前端滑輪移到最后,發(fā)現(xiàn)并沒有頁數(shù)的標簽,而是通過自動加載數(shù)據(jù)來呈現(xiàn),效果如下:

在這里插入圖片描述

在這里插入圖片描述

在不刷新整個頁面的基礎(chǔ)上加載新的數(shù)據(jù),這很容易讓我們聯(lián)想到ajax異步請求。
異步請求通常就是利用ajax技術(shù),能在不更新整個頁面的前提下維護數(shù)據(jù)。這使得Web應(yīng)用程序更為迅捷地回應(yīng)用戶動作,并避免了在網(wǎng)絡(luò)上發(fā)送那些沒有改變的信息。
接下來我們嘗試利用谷歌瀏覽器抓取異步請求的信息。

2.4抓取ajax異步請求數(shù)據(jù)

使用谷歌瀏覽器抓取ajax異步請求數(shù)據(jù)
為了避免干擾因素,我們在抓包前需要點擊clear按鈕,清空當前的抓包記錄

在這里插入圖片描述

將滑塊移動到最后,使前端頁面自動加載數(shù)據(jù),分析數(shù)據(jù)加載時抓取到的數(shù)據(jù)包信息。通過多次分析驗證,發(fā)現(xiàn)結(jié)果有一個get請求攜帶著大量的刷新時的數(shù)據(jù)。如下圖所示:

在這里插入圖片描述

是JSON格式的數(shù)據(jù),這里簡單介紹一下JSON格式的數(shù)據(jù)。
JSON 是前后端傳輸數(shù)據(jù)最常見的用法之一,是從 web 服務(wù)器上讀取 JSON 數(shù)據(jù)(作為文件或作為 HttpRequest),將 JSON 數(shù)據(jù)轉(zhuǎn)換為 JavaScript 對象,然后在網(wǎng)頁中使用該數(shù)據(jù)。
通過分析,我們可以發(fā)現(xiàn)數(shù)據(jù)是存放在result_vos列表下的各個字典中的,我們可以使用循環(huán),然后通過dict[“xxx”]的方式來提取數(shù)據(jù)。

2.5 分析url地址

在這里插入圖片描述

我們發(fā)現(xiàn)這個GET請求攜帶了大量的未知參數(shù),通過經(jīng)驗分析,以及英語首字母,我們可以猜測P是page(頁),Q是query(查詢)的意思,其他xxx=-1應(yīng)該是默認值,我們暫時按照這個猜測進行刪減參數(shù)。
測試結(jié)果截圖:

在這里插入圖片描述

通過測試,發(fā)現(xiàn)猜測正確,只保留了q、t、p三個參數(shù),依然可以訪問到傳輸?shù)臄?shù)據(jù)內(nèi)容(事實上,這里t參數(shù)也可以刪除,同學(xué)們可以自行測試)
這樣,這條url對應(yīng)的重要參數(shù)都分析出來了,鏈接如下:
https://so.csdn.net/api/v3/search?q=python&t=all&p=2
跟我們猜測的一樣,q是代表查詢,p是代表page,這樣我們已經(jīng)獲取到CSDN引擎的核心API,我們可以通過這條API來實現(xiàn)搜索引擎的功能。
至此,抓包分析過程結(jié)束。

3. 使用scrapy爬取CSDN數(shù)據(jù)接口

3.1 start_requests

使用start_requests函數(shù)進行構(gòu)造20頁的url列表。
這里start_requests方法必須返回一個可迭代對象(iterable)。該對象包含了spider用于抓取的第一個Request。
當spider開始抓取并且未指定start_urls時,該方法將會被調(diào)用。該方法僅僅會被scrapy調(diào)用一次,因此可以將其實現(xiàn)為url生成器。
使用scrapy.Request可以發(fā)送一個GET請求,傳送到指定的函數(shù)進行處理。
詳細代碼操作如下:

 # 重寫start_urls的方法
    def start_requests(self):
        # 這里是控制CSDN的文章類型
        input_text = input('請輸入要爬取的CSDN類型:')
        # 是控制爬取文章頁數(shù)
        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函數(shù)提取數(shù)據(jù)

這里需要掌握幾個重要的方法應(yīng)用

  • response.text 請求返回的響應(yīng)的字符串格式的數(shù)據(jù)
  • json.loads() loads方法是將str轉(zhuǎn)化為dict格式數(shù)據(jù)
  • json.dumps() dumps方法是將dict格式的數(shù)據(jù)轉(zhuǎn)化為str

具體代碼操作如下:

data_dict = json.loads(response.text)

使用循環(huán)遍歷json數(shù)據(jù)中的各個具體直播間數(shù)據(jù)的信息,新建一個item字典進行數(shù)據(jù)存儲,然后使用yield傳遞給引擎進行相應(yīng)的處理
代碼操作如下:

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']
每次調(diào)用pipline的時候,都會運行一遍
class Day02Pipeline:
    def process_item(self, item, spider):
        文件默認保存到當前目錄下的douyu.csv中
這里a是追加操作
        with open('csdn.csv', 'a', encoding='utf-8', newline='') as fa:
            保存headers規(guī)定的列名內(nèi)容
            writer = csv.DictWriter(fa, headers)
            writer.writerow(item)
            print(item)
      return item

3.4 運行結(jié)果

最后,我們來查看一下運行結(jié)果,以及保存好的csv文件
終端運行結(jié)果如下:

在這里插入圖片描述

在這里插入圖片描述

至此,爬蟲實驗結(jié)束。

4. 效果展示

4.1 flask后端展示

搭建過程略
(入門級搭建,沒有用企業(yè)級開發(fā)流程,后期可以考慮出flask的教程)
展示結(jié)構(gòu)如下:

在這里插入圖片描述

flask入門可自行百度

4.2 效果展示

在這里插入圖片描述

點擊搜索后:

在這里插入圖片描述

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

好了,這樣簡易版的搜索引擎就搭建好了。更多相關(guān)scrapy+flask+html搜索引擎內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python Web開發(fā)模板引擎優(yōu)缺點總結(jié)

    Python Web開發(fā)模板引擎優(yōu)缺點總結(jié)

    這篇文章主要介紹了Python Web開發(fā)模板引擎優(yōu)缺點總結(jié),需要的朋友可以參考下
    2014-05-05
  • 對python-3-print重定向輸出的幾種方法總結(jié)

    對python-3-print重定向輸出的幾種方法總結(jié)

    今天小編就為大家分享一篇對python-3-print重定向輸出的幾種方法總結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 使用pandas模塊實現(xiàn)數(shù)據(jù)的標準化操作

    使用pandas模塊實現(xiàn)數(shù)據(jù)的標準化操作

    這篇文章主要介紹了使用pandas模塊實現(xiàn)數(shù)據(jù)的標準化操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 詳解Python 切片語法

    詳解Python 切片語法

    Python的切片是特別常用的功能,主要用于對列表的元素取值。這篇文章主要介紹了詳解Python 切片語法,需要的朋友可以參考下
    2019-06-06
  • PyTorch數(shù)據(jù)讀取的實現(xiàn)示例

    PyTorch數(shù)據(jù)讀取的實現(xiàn)示例

    這篇文章主要介紹了PyTorch數(shù)據(jù)讀取的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python中Numpy包的安裝與使用方法簡明教程

    Python中Numpy包的安裝與使用方法簡明教程

    這篇文章主要介紹了Python中Numpy包的安裝與使用方法,結(jié)合簡單實例形式分析了Python使用pip命令在線與離線whl包安裝,以及使用numpy打印隨機數(shù)矩陣的操作技巧,需要的朋友可以參考下
    2018-07-07
  • python中的logging模塊的簡單應(yīng)用和高級使用

    python中的logging模塊的簡單應(yīng)用和高級使用

    在?Python?中,可以使用內(nèi)置的?logging?模塊來記錄應(yīng)用程序的信息,logging?模塊還提供了一些高級功能,如日志回溯、日志輪換、日志緩沖等,需要的朋友可以參考下
    2023-04-04
  • 利用機器學(xué)習(xí)預(yù)測房價

    利用機器學(xué)習(xí)預(yù)測房價

    這篇文章主要介紹了利用機器學(xué)習(xí)回歸模型預(yù)測房價,解釋清晰,代碼詳細,是很不錯的機器學(xué)習(xí)實戰(zhàn)演練,對機器學(xué)習(xí)感興趣的朋友可以參考一下
    2021-04-04
  • Python+OpenCV六種實時圖像處理詳細講解

    Python+OpenCV六種實時圖像處理詳細講解

    OpenCV常用的圖像處理為閾值二值化、邊緣檢測、輪廓檢測、高斯濾波、色彩轉(zhuǎn)換、調(diào)節(jié)對比度。本文主要介紹了利用Python和OpenCV對實時圖像進行上述六種操作的詳細講解,感興趣的可以了解一下。
    2021-11-11
  • Python使用ffmpeg實現(xiàn)將WebM文件轉(zhuǎn)換為MP4文件

    Python使用ffmpeg實現(xiàn)將WebM文件轉(zhuǎn)換為MP4文件

    這篇文章主要介紹了Python如何使用wxPython庫創(chuàng)建一個簡單的GUI應(yīng)用程序,可以實現(xiàn)將WebM文件轉(zhuǎn)換為MP4文件,文中的示例代碼講解詳細,感興趣的可以動手嘗試一下
    2023-08-08

最新評論

彭泽县| 光山县| 敦化市| 临城县| 瑞金市| 新民市| 衢州市| 古蔺县| 名山县| 息烽县| 合肥市| 玉环县| 鱼台县| 云安县| 即墨市| 聊城市| 惠来县| 万年县| 阿瓦提县| 津南区| 龙海市| 罗源县| 玛沁县| 淮安市| 修文县| 浪卡子县| 朝阳县| 双辽市| 静安区| 寿阳县| 会宁县| 浮梁县| 怀安县| 巴彦淖尔市| 海伦市| 钟山县| 井冈山市| 江阴市| 岳阳县| 砚山县| 杂多县|