DrissionPage爬蟲包實戰分享

一、爬蟲

1.1 爬蟲解釋

爬蟲簡單的說就是模擬人的瀏覽器行為,簡單的爬蟲是request請求網頁信息,然后對html數據進行解析得到自己需要的數據信息保存在本地。

1.2 爬蟲的思路

# 1.發送請求

# 2.獲取數據

# 3.解析數據

# 4.保存數據

1.3 爬蟲工具

DrissionPage的個人空間-DrissionPage個人主頁-嗶哩嗶哩視頻

DrissionPage??是一個基于 Python 的網頁自動化工具。

既能控制瀏覽器,也能收發數據包,還能把兩者合而為一。

可兼顧瀏覽器自動化的便利性和 requests 的高效率。

功能強大,語法簡潔優雅,代碼量少,對新手友好。

可以參考官網視頻學習基本概念。

二、爬蟲實戰

2.1 爬蟲需求

對首頁 - 人民法院案例庫的4884條法律案件信息進行csv保存。

2.2 爬蟲效果

爬蟲后的效果圖:

2.3 爬蟲實現過程

2.3.1 環境配置

最好先再本地安裝好anaconda,然后創建虛擬環境和安裝這個包。如何安裝anaconda可以參考我之前的博客手把手教你使用云服務器和部署相關環境!!!-CSDN博客

conda create -n pachong python=3.10.16 -y

conda activate pachong

pip install?DrissionPage==4.1.0.18

DrissionPage ? ? ? 4.1.0.18

python? 3.10.16

2.3.2 學習DrissionPage的基本操作

設置好DrissionPage的默認瀏覽器啟動路徑,找到自己的chrome瀏覽器或者edge瀏覽器,得到路徑,注意是需要.exe的執行文件路徑,運行下面的代碼就設置好了瀏覽器的啟動環境。

from DrissionPage import ChromiumOptions

path = r'C:\Program Files\Google\Chrome\Application\Chrome.exe' ?# 請改為你電腦內Chrome可執行文件路徑

ChromiumOptions().set_browser_path(path).save()

?實例化瀏覽器對象和關閉瀏覽器對象操作

# 瀏覽器對象,標簽頁對象,頁面元素對象

from DrissionPage import Chromium

# 鏈接瀏覽器

browser = Chromium()

browser.set.retry_interval(5)# 設置重試間隔

tab = browser.latest_tab

# 關閉瀏覽器

browser.quit()

?標簽頁的相關函數

# 瀏覽器對象,標簽頁對象,頁面元素對象

from DrissionPage import Chromium

# 鏈接瀏覽器

browser = Chromium()

browser.set.retry_interval(5)# 設置重試間隔

tab = browser.latest_tab

tab.get('http://DrissionPage.cn') # 使用標簽頁訪問url函數

tab2 = browser.new_tab("http://www.baidu.com") # 新建標簽頁函數

tab3 = browser.get_tab(title="DrissionPage") # 訪問標簽頁函數

# 關閉標簽頁對象

tab.close()

# 標簽頁的后退前進與刷新

tab.back(2) # 后退2次

tab.forward(1) # 前進

tab.refresh() # 刷新

# 關閉瀏覽器

browser.quit()

?html元素對象的相關函數,元素可以使用Xpath語法進行定位

from DrissionPage import Chromium

# 鏈接瀏覽器

browser = Chromium()

browser.set.retry_interval(5)# 設置重試間隔

tab = browser.latest_tab

tab.get('http://DrissionPage.cn')

# 獲取頁面元素

# tab對象中直接查找

ele = tab.ele('使用文檔') # 獲取文本中包含“使用文檔”的元素

ele.check() # 點擊元素

# 相對位置查找

ele2 = ele.next() # 獲取ele的下一個兄弟元素

ele2.click() # 點擊元素

# 關閉瀏覽器

# browser.quit()

?一個實例

from DrissionPage import Chromium

# 鏈接瀏覽器

browser = Chromium()

browser.set.retry_interval(5)# 設置重試間隔

tab2 = browser.new_tab("http://www.baidu.com")

# 定位一個元素,輸入按鈕 , x表示xpath語法

input_btn = tab2.ele('x://*[@id="kw"]')

print(input_btn.html)

# 輸入搜索內容

input_btn.input("python")

# 定位一個搜索按鈕

search_btn = tab2.ele('x://*[@id="su"]')

search_btn.click()

2.3.3 獲取目標網頁的數據

2.3.3.1 抓包分析得到數據,需要先監聽標識符

按F12進入開發者模式,刷新頁面,再network中可以搜索相關的數據包

比如我們搜索,蔣某華猥褻兒童案。只有一個搜索結果,headers是前端請求后端的信息,preview是請求結果的預覽信息,response是請求結果的詳細信息。我們對數據抓包主要是看這三部分信息。

?我們再preview中可以看到數據包中的['data']['datas']剛好有這頁的10個案件信息,我們對這個信息中抽取我們需要的信息再保存再本地就行。

?我們此時監聽的是:蔣某華猥褻兒童案,雖然也可以用,但是我們一般選擇監聽請求頭的信息,一般是“?”前面的https(如果有的話),復制一下,檢索一下看一下是不是唯一值。

2.3.3.2 html元素定位xpath得到html元素,得到數據

DrissionPage非常好的功能是通過xpath語法定位到html元素,就可以使用元素.text 、元素.html等獲得相關數據,定位元素過程,F12打開開發者工具,最左邊的定位標識符選擇你想定位的網頁元素,比如我定位的是下一頁的按鈕元素,得到位置后,右鍵選擇copy,XPath,然后按ctrl+f進行搜索模式,就可以看到你的這個XPath語法定位的元素再當前標簽頁中有幾個了。

2..3.4 爬取全部信息

我們平時怎么操作瀏覽器,就怎么寫代碼。

思路: 打開瀏覽器,新建標簽頁,搜索目標url,通過監聽唯一的標識符:“https://rmfyalk.court.gov.cn/cpws_al_api/api/cpwsAl/search”得到當前頁面的10個案件的數據包,對數據包列表的每個數據進行抽取我們需要的信息,再保存到csv表格中。下滑,點擊下一頁,重復上述操作。

from DrissionPage import Chromium

from pprint import pprint

import csv

# 打來瀏覽器

tab = Chromium().latest_tab

# 監聽數據包

tab.listen.start("https://rmfyalk.court.gov.cn/cpws_al_api/api/cpwsAl/search")

# 訪問頁面

url = "https://rmfyalk.court.gov.cn/view/list.html?key=case_sort_id_cpwsAl&keyName=%25E6%25A1%2588%25E4%25BB%25B6%25E7%25B1%25BB%25E5%259E%258B&value=05&valueName=%25E6%2589%25A7%25E8%25A1%258C&isAdvSearch=2"

tab.get(url)

f = open(r'E:\gdzd_hb\pachoong\zhixing.csv', 'w', encoding='utf-8', newline='')

# 字典寫入方法

csv_writer = csv.DictWriter(f, fieldnames=['案件名稱', '案件標簽', '裁判要旨'])

# 寫入表頭

csv_writer.writeheader()

for page in range(1, 208):

? ? print(f'正在爬取第{page}頁')

? ? # 等待數據包加載

? ? resp = tab.listen.wait()

? ? # 獲取響應數據-->json

? ? json_data = resp.response.body

? ? # # 打印數據

? ? # print(json_data)

? ? # print(type(json_data))

? ? # 遍歷jobInfo列表

? ? jobList = json_data['data']['datas']

? ? for job in jobList:

? ? ? ? pprint(job) # 打印字典格式

? ? ? ? break # 打印一個結束

? ? # 抽取需要的數據

? ? for job in jobList:

? ? ? ? dit = {

? ? ? ? ? ? '案件名稱': job['cpws_al_title'],

? ? ? ? ? ? '案件標簽': job['cpws_al_infos'],

? ? ? ? ? ? '裁判要旨': job['cpws_al_cpyz']

? ? ? ? }

? ? ? ? pprint(dit)

? ? ? ? # 字典寫入數據

? ? ? ? csv_writer.writerow(dit)

? ? # 下滑到最底部

? ? tab.scroll.to_bottom()

? ? # 點擊下一頁

? ? tab.ele('css:.page-next').click()

三、問題和小結?

進階需求:爬取每個案件的對應的詳細PDF信息。

方法一:通過點擊每個案件,進去后再點擊下載PDF的案件到指定文件夾中實現。

存在問題:網站做了限制,每個賬號下載了20個左右的PDF,就會顯示下面的報錯,就算是人工手動下載PDF文件也是一樣的。

方法二:通過獲取每個案件的詳情url地址,使用元素來獲取相關信息,用字典保存,再保存到csv文件中。

存在的問題:網站做了限制,我們一個賬號連續訪問40個左右的案件詳情網頁后,就會顯示空的網頁,從而無法獲得html元素。

?這兩個問題我暫時沒有解決辦法,因為DrissionPage已經是模擬人的行為進行抓包了,但是網站對每個賬號進行了限制。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84267.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84267.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84267.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android 布局小知識點 隨記

1. 布局屬性的命名前綴規律 與父容器相關的前綴 layout_alignParent:相對于父容器的對齊方式。 例如:layout_alignParentTop"true"(相對于父容器頂部對齊)。layout_margin:與父容器或其他控件的邊距。 例如…

GeoDrive:基于三維幾何信息有精確動作控制的駕駛世界模型

25年5月來自北大、理想汽車和 UC Berkeley 的論文“GeoDrive: 3D Geometry-Informed Driving World Model with Precise Action Control”。 世界模型的最新進展徹底改變動態環境模擬,使系統能夠預見未來狀態并評估潛在行動。在自動駕駛中,這些功能可幫…

Java高頻面試之并發編程-25

hello啊,各位觀眾姥爺們!!!本baby今天又來報道了!哈哈哈哈哈嗝🐶 面試官:CAS都有哪些問題?如何解決? CAS 的問題及解決方案 CAS(Compare and Swap&#xff0…

從碳基羊駝到硅基LLaMA:開源大模型家族的生物隱喻與技術進化全景

在人工智能的廣袤版圖上,一場從生物學羊駝到數字智能體的奇妙轉變正在上演。Meta推出的LLaMA(Large Language Model Meta AI)系列模型,不僅名字源自美洲駝(llama),更以其開源特性和強大性能,引領了開源大模型社區的“駝類大爆發”…

可下載舊版app屏蔽更新的app市場

軟件介紹 手機用久了,app越來越臃腫,老手機卡頓成常態。這里給大家推薦個改善老手機使用體驗的方法,還能幫我們卸載不需要的app。 手機現狀 如今的app不斷更新,看似在優化,實則內存占用越來越大,對手機性…

Python_day47

作業:對比不同卷積層熱圖可視化的結果 一、不同卷積層的特征特性 卷積層類型特征類型特征抽象程度對輸入的依賴程度低層卷積層(如第 1 - 3 層)邊緣、紋理、顏色、簡單形狀等基礎特征低高,直接與輸入像素關聯中層卷積層&#xff08…

比較數據遷移后MySQL數據庫和達夢數據庫中的表

設計一個MySQL數據庫和達夢數據庫的表數據比較的詳細程序流程,兩張表是相同的結構,都有整型主鍵id字段,需要每次從數據庫分批取得2000條數據,用于比較,比較操作的同時可以再取2000條數據,等上一次比較完成之…

GC1808高性能24位立體聲音頻ADC芯片解析

1. 芯片概述 GC1808是一款24位立體聲音頻模數轉換器(ADC),支持8kHz~96kHz采樣率,集成Δ-Σ調制器、數字抗混疊濾波器和高通濾波器,適用于高保真音頻采集場景。 2. 核心特性 高精度:24位分辨率&#xff0c…

Linux 文本比較與處理工具:comm、uniq、diff、patch、sort 全解析

在類 UNIX 操作系統,特別是 Linux 系統中,命令行提供了一整套強大的文本處理工具,這些工具對于文件差異對比、內容篩選、文本排序以及源代碼管理尤為重要。今天,我們將結合真實示例,深入介紹并實戰演示 comm、uniq、di…

6月6日day46打卡

通道注意力(SE注意力) 知識點回顧: 不同CNN層的特征圖:不同通道的特征圖什么是注意力:注意力家族,類似于動物園,都是不同的模塊,好不好試了才知道。通道注意力:模型的定義和插入的位置通道注意力…

前端技能包

ES6 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><script>// 變量定義var a1;let b5; // 現在使用let 定義變量// 對象解構let person{&quo…

大數據(1) 大數據概述

一、大數據時代 1.三次信息化浪潮 二、什么是大數據 1.四個特點 4V&#xff1a;數據量&#xff08;Volume&#xff09;大、數據類型&#xff08;Variety&#xff09;繁多、處理速度&#xff08;Velocity&#xff09;快、價值密度&#xff08;Value&#xff09;低 三、大數據…

element-plus 單選組件 el-radio,選不上,又沒報錯,直接復制官網也不行解決方案

在使用 Vue 框架開發項目時&#xff0c;Element UI 是常用的組件庫。最近在開發中遇到了 Element 單選框組件el-radio的雙向綁定問題&#xff0c;直接復制element官網上的的案例下來也是不得&#xff0c;經過調試和探索&#xff0c;終于找到了解決方案&#xff0c;特此記錄分享…

使用 Amazon Q Developer CLI 快速搭建各種場景的 Flink 數據同步管道

在 AI 和大數據時代&#xff0c;企業通常需要構建各種數據同步管道。例如&#xff0c;實時數倉實現從數據庫到數據倉庫或者數據湖的實時復制&#xff0c;為業務部門和決策團隊分析提供數據結果和見解&#xff1b;再比如&#xff0c;NoSQL 游戲玩家數據&#xff0c;需要轉換為 S…

開疆智能Ethernet/IP轉Modbus網關連接質量流量計配置案例

首先設置modbus從站的485參數&#xff0c;確保網關和從站的485參數保持一致。 設置完成后打開網關配置軟件并新建項目 先設置網關在Ethernet一側的IP地址以及數據轉換長度。 設置網關的Modbus參數如波特率9600無校驗8數據位&#xff08;無校驗選8&#xff0c;有校驗選9&#xf…

多智能體MPE環境遇到的若干問題

最近學習MADDPG算法&#xff0c;用MPE環境來測試算法性能。于是便下載了pettingzoo包&#xff0c;運行了simple_tag_v3環境&#xff0c;此環境中有獵人、逃亡者和障礙物。 問題1: MPE中的simple_tag_v3環境&#xff0c;在渲染時看似移動的問題 由于相機視角跟隨導致的視覺錯覺…

[特殊字符] FFmpeg 學習筆記

一、FFmpeg 簡介 FFmpeg 是一個開源跨平臺的視頻和音頻處理工具&#xff0c;支持錄制、轉換、流處理等功能。 官網&#xff1a;https://ffmpeg.org 安裝命令&#xff08;macOS&#xff09;&#xff1a; brew install ffmpeg二、基本命令結構 ffmpeg -i 輸入文件 [參數] 輸出…

leetcode Top100 238. 除自身以外數組的乘積|數組系列

題目鏈接&#xff1a;238. 除自身以外數組的乘積 - 力扣&#xff08;LeetCode&#xff09; 238. 除自身以外數組的乘積|數組系列 給你一個整數數組 nums&#xff0c;返回 數組 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積 。 題目數據 …

【Liunx專欄_6】Linux線程概念與控制

目錄 1、線程是什么&#xff1f;通過一個圖來理解……2、Linux進程和線程&#xff1f;2.1、之間的關系和區別2.2、線程的優缺點&#xff1f; 3、線程的創建3.1、POSIX線程庫3.2、創建線程3.3、PS查看運行的線程 4、線程的終止5、線程的等待6、線程分離7、線程封裝 1、線程是什么…

「Java基本語法」標識符、關鍵字與常量

知識點解析 1&#xff0e;標識符&#xff08;Identifiers&#xff09;&#xff1a;用于命名類、方法、變量等。 標識符命名規則&#xff1a; 標識符由字母&#xff08;A-Z&#xff0c;a-z&#xff09;、數字&#xff08;0-9&#xff09;、下劃線“_”或美元符號“$”組成。標…