用python來爬取某魚的商品信息(2/2)

目錄

上一篇文章

本章內容

設置瀏覽器為運行結束后不關閉(可選)

定位到搜索框的xpath地址

執行動作

獲取cookie

保存為json文件

修改cookie的sameSite值并且導入cookie

導入cookie(出錯)

導入cookie(修改后)

最后出現頁面

需要注意的問題

所有代碼

總結


上一篇文章

用python來爬取某魚的商品信息(1/2)_木木em哈哈的博客-CSDN博客本章講理論,后面一節講代碼拿來練練手的,練練selenium包,實戰一下(本來想拿來練手的,沒想到他喵的有挺多防爬的,直接開局就困難難度我靠,凸(艸皿艸 ))找到可以爬取的網站然后添加cookie然后刷新界面就可以發現搜索結果出來了這一次實戰經歷真的讓我遇到了selenium許多奇奇怪怪的反爬手段,也是讓我可以大幅度提升自己實戰經驗的一個經歷,前前后后排bug,繞反爬,這一個項目打了整整兩天。累diethttps://blog.csdn.net/mumuemhaha/article/details/132238660?spm=1001.2014.3001.5502

本章內容

主要講的是上一章的代碼實現

導入所需要的程序包

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import time
import json

設置瀏覽器為運行結束后不關閉(可選)

之后先設置自己想要搜索的內容,并且把瀏覽器設置為允許結束后不關閉,并且打開要爬取的咸魚網站(可設可不設)

input_1=input('輸入想要搜索的內容:')option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True)# 注意此處添加了chrome_options參數
driver = webdriver.Chrome(chrome_options=option)
driver.get('https://h5.m.goofish.com/app/idleFish-F2e/fish-mini-pha/search.html?spm=a2170.tb_mini_index.0.0')

定位到搜索框的xpath地址

driver_1=driver.find_element(by='xpath',value='/html/body/div/div/div[1]/input')

執行動作

執行動作(調用鼠標api點擊剛剛定位的搜索框,然后輸入input_1的值并且回車

ActionChains(driver) \.move_to_element(driver_1) \.click_and_hold() \.pause(1) \.send_keys(input_1) \.key_down(Keys.ENTER)\.perform()time.sleep(1)

中間的.pause(1)以及time.sleep(1)是等待一秒鐘的時間(保險起見,怕網頁沒有加載好,或者你設置一個selenium等待函數更保險)

獲取cookie

接下來就是獲取cookie,獲取cookie方法上一章講了

?在你的瀏覽器上,下載cookie editor插件登錄,不要用運行python時跳出的瀏覽器,正常打開瀏覽器(這樣不會跳驗證碼。。。即使跳了也可以手動成功過),導出你的cookie

保存為json文件

然后新建一個json格式的文件并且把它命名為cookie.json

修改cookie的sameSite值并且導入cookie

導入cookie(出錯)

cookies=json.load(open('cookie.json', 'r'))
for cookie in cookies:driver.add_cookie(cookie)

但是!!!!

前面講過直接導入會報錯

 assert cookie_dict[‘sameSite‘] in [‘Strict‘, ‘Lax‘] AssertionError()

由于這里語法規定sameSite必須為‘Strict‘, ‘Lax‘兩個之一,不然就報錯

所以我們要遍歷字典,并且把字典中的sameSite設置為Strict

導入cookie(修改后)

所以代碼改為

cookies=json.load(open('cookie.json', 'r'))
for cookie in cookies:if'sameSite' in cookie:cookie['sameSite'] = 'Strict'driver.add_cookie(cookie)
driver.refresh()

注意,導入cookie后要用driver.refresh()刷新

打印源代碼

?然后打印網頁的源代碼,注意要等3秒加載元素(或者用re庫帶的篩選,篩選你想要的的元素,比如商品鏈接,價格,以及介紹)

time.sleep(3)
print(driver.page_source)

最后出現頁面

需要注意的問題

  • 首先要說的是這個通過python不如通過app抓包來的穩定
  • 頁面中你登錄的cookie的失效時間是不確定的,所以你可能需要經常更新cookie(看個人情況)
  • 無法頻繁(比如5分鐘一次)搜索,否則會跳滑塊驗證,或者你有多個賬號也可以搞(大概也就這個流程)
  • 寫出來的代碼只是提取出來網頁源代碼——其實都提取出網頁源代碼了,使用就只有一個篩選了(csdn上有大把的優質博主和大佬教你通過源代碼過濾有用的信息)
  • 當然如果需要的話我可以再水一篇博客
  • 它理論上可以關聯到釘釘機器人或者是QQ機器人上實現定時推送咸魚信息(啊?你問我為什么不繼續寫?因為還沒學,不然這期標題末尾就不是(2/2)而是(2/3)了;咳咳咳...u1s1,釘釘應該是有教程教的,傻妞機器人應該也可以執行python腳本的,“按理”來說不會很難實現,實在不行我再去學吧(累die...)

所有代碼

所有代碼附上吧

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import time
import jsoninput_1=input('輸入想要搜索的內容:')# 不自動關閉瀏覽器
option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True)# 注意此處添加了chrome_options參數
driver = webdriver.Chrome(chrome_options=option)
driver.get('https://h5.m.goofish.com/app/idleFish-F2e/fish-mini-pha/search.html?spm=a2170.tb_mini_index.0.0')driver_1=driver.find_element(by='xpath',value='/html/body/div/div/div[1]/input')ActionChains(driver) \.move_to_element(driver_1) \.click_and_hold() \.pause(1) \.send_keys(input_1) \.key_down(Keys.ENTER)\.perform()time.sleep(1)cookies=json.load(open('cookie.json', 'r'))
for cookie in cookies:if'sameSite' in cookie:cookie['sameSite'] = 'Strict'driver.add_cookie(cookie)
driver.refresh()time.sleep(3)
print(driver.page_source)

總結

這些代碼搞得我暈頭轉向的,尤其是那個內嵌的登錄頁面讓我走了很多彎路,但是對于這個庫的學習應該也算是初窺門徑吧,如果有大佬有優化的地方歡迎指出(真的沒學多深,很容易出錯的)

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

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

相關文章

Android Ble藍牙App(五)數據操作

Ble藍牙App(五)數據操作 前言正文一、操作內容處理二、讀取數據① 概念② 實操 三、寫入數據① 概念② 實操 四、打開通知一、概念二、實操三、收到數據 五、源碼 前言 關于低功耗藍牙的服務、特性、屬性、描述符都已經講清楚了,而下面就是使…

電腦系統重裝日記

重裝原因 電腦C盤幾乎爆炸故重裝系統一清二白 此片原因 記錄重裝過程,強調一些要注意的點,以防日后重裝。 重裝過程 1.清空電腦文件后重啟,電腦冒藍光,一直藍屏反復重啟,故只能重裝系統以解難題。 2.準備一個U盤&…

設計HTML5文檔結構

定義清晰、一致的文檔結構不僅方便后期維護和拓展,同時也大大降低了CSS和JavaScript的應用難度。為了提高搜索引擎的檢索率,適應智能化處理,設計符合語義的結構顯得很重要。 1、頭部結構 在HTML文檔的頭部區域,存儲著各種網頁元…

Python Opencv實踐 - 圖像屬性相關

import numpy as np import cv2 as cv import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) plt.imshow(img[:,:,::-1])#像素操作 pixel img[320,370] print(pixel)#只獲取藍色通道的值 pixel_blue img[320,370,0]…

【Hystrix技術指南】(7)故障切換的運作流程原理分析(含源碼)

背景介紹 目前對于一些非核心操作,如增減庫存后保存操作日志發送異步消息時(具體業務流程),一旦出現MQ服務異常時,會導致接口響應超時,因此可以考慮對非核心操作引入服務降級、服務隔離。 Hystrix說明 官方…

Grounding DINO:根據文字提示檢測任意目標

文章目錄 1. 背景介紹2. 方法創新2.1 Feature Extraction and Enhancer2.2 Language-Guided Query Selection2.3 Cross-Modality Decoder2.4 Sub-Sentence Level Text Feature2.5 Loss Function3. 實驗結果3.1 Zero-Shot Transfer of Grounding DINO3.2 Referring Object Detec…

設備管理系統能起到什么作用?

在現代工業運營中,設備的高效管理和維護對于保障生產穩定運行和提升企業競爭力至關重要。而設備管理系統作為一種關鍵工具,能夠極大地提高企業的生產效率和設備維護的準確性。本文將深入探討設備管理系統的作用,以PreMaint設備數字化平臺為例…

Qt 對象序列化/反序列化

閱讀本文大概需要 3 分鐘 背景 日常開發過程中,避免不了對象序列化和反序列化,如果你使用 Qt 進行開發,那么有一種方法實現起來非常簡單和容易。 實現 我們知道 Qt 的元對象系統非常強大,基于此屬性我們可以實現對象的序列化和…

智能家居(3)---socket網絡控制線程封裝

封裝socket網絡線程實現對智能家居中各種燈光的控制 main.Pro(主函數) #include <stdio.h> #include "controlDevice.h" #include "inputCommand.h" #include <pthread.h>struct Devices *pdeviceHead NULL; //設備工廠鏈表…

ES踩坑記錄之UNASSIGNED分片無法恢復

問題背景 換節點 我們線上有一套ES集群&#xff0c;三臺機器&#xff0c;共運行了6個節點。一直在線上跑了幾個月也一直沒出什么問題。然而好巧不巧&#xff0c;就在昨天&#xff0c;集群中的3號節點磁盤出現故障&#xff0c;導致機器直接癱瘓。本來大家覺得問題不大&#xf…

HTML和JavaScript實現一個簡單的計算器

使用HTML和JavaScript實現一個簡單的計算器。 一、繪制鍵盤 <!DOCTYPE html> <html> <head><title>Simple Calculator</title><style>.calculator {display: grid;grid-template-columns: repeat(4, 1fr);grid-gap: 5px;padding: 10px;}.…

【elementUi】繪制自定義表格、繪制曲線表格

要求繪制下圖系列表格&#xff1a; 實現步驟: 1.繪制樹&#xff0c;實現樹勾選字段—>表格繪制字段 邏輯&#xff1a; 樹&#xff1a;check-change“treeChart.handleCheckChange” 綁定點擊選擇事件&#xff0c;改變data.column3數據項&#xff1b;表格:columns"data…

基于 Nginx All In One 的 Outline Wiki 部署方法

1. Outline 簡介 官網&#xff1a;https://www.getoutline.com/ Outline 是一個開源的知識庫和團隊協作工具&#x1f9e0;&#xff0c;旨在幫助團隊共享、組織和協作文檔&#x1f4dd;。它提供了一個簡潔的界面&#xff0c;使用戶能夠輕松創建、編輯和查看文檔。 以下是 Out…

Ajax 筆記(四)—— Ajax 進階

筆記目錄 4. Ajax 進階4.1 同步代碼和異步代碼4.2 回調函數地獄4.2.1 解決方法一&#xff1a;Promise 鏈式調用4.2.2 解決方法二&#xff1a;async 函數和 await 4.3 Promise.all 靜態方法4.4 事件循環4.4.1 事件循環4.4.2 宏任務與微任務 4.5 案例4.5.1 案例一-商品分類4.5.2 …

讀書筆記 |【項目思維與管理】? 項目成為一種生存方式

讀書筆記 |【項目思維與管理】? 項目成為一種生存方式 一、理解項目固有的挑戰二、項目對企業的價值三、知識型企業的經營邏輯四、做項目管理的推進者 &#x1f496;The Begin&#x1f496;點點關注&#xff0c;收藏不迷路&#x1f496; 項目無處不在&#xff0c;項目已經成為…

智慧建筑工地平臺,通過信息化技術、物聯網、人工智能技術,實現對施工全過程的實時監控、數據分析、智能管理和優化調控

智慧工地是指通過信息化技術、物聯網、人工智能技術等手段&#xff0c;對建筑工地進行數字化、智能化、網絡化升級&#xff0c;實現對施工全過程的實時監控、數據分析、智能管理和優化調控。智慧工地的建設可以提高工地的安全性、效率性和質量&#xff0c;降低施工成本&#xf…

分布式唯一ID實戰

目錄 一、UUID二、數據庫方式1、數據庫生成之簡單方式2、數據庫生成 - 多臺機器和設置步長&#xff0c;解決性能問題3、Leaf-segment 方案實現4、雙 buffer 優化5、Leaf高可用容災 三、基于Redis實現分布式ID四、雪花算法 一、UUID UUID的標準形式包含32個16進制數字&#xff…

Word 2019打開.doc文檔后圖片和公式不顯示(呈現為白框)的解決辦法

Word 2019打開.doc文檔后圖片和公式不顯示&#xff08;呈現為白框&#xff09;的解決辦法 目錄 Word 2019打開.doc文檔后圖片和公式不顯示&#xff08;呈現為白框&#xff09;的解決辦法一、問題描述二、解決方法1.打開 WORD 2019&#xff0c;點擊菜單中的“文件”&#xff1b;…

微服務05-Sentinel流量防衛兵

隨著微服務的流行,服務和服務之間的穩定性變得越來越重要。Sentinel 是面向分布式、多語言異構化服務架構的流量治理組件,主要以 流量 為切入點,從流量路由、流量控制、流量整形、熔斷降級、系統自適應過載保護、熱點流量防護等多個維度來幫助開發者保障微服務的穩定性。 S…

FBB簡介

FBB FBB簡介FBB組網名詞解釋FBB組網&#xff08;從下至上&#xff09;小結 FBB簡介 FBB&#xff1a;Fixed BroadBand&#xff0c;固定寬帶網絡&#xff0c;是一種依托線纜介質進行傳輸的地面有線網絡&#xff0c;區分與MBB&#xff0c;MBB是移動網絡。 MBB是天上一張網&#x…