4-數據提取方法2(xpath和lxml)(6節課學會爬蟲)

4-數據提取方法2(xpath和lxml)(6節課學會爬蟲)

  • 1,Xpath語法:
    • (1)選擇節點(標簽)
    • (2)“//”:能從任意節點開始選擇
    • (3)“@”符號的用途
    • (4)獲取文本
    • (5)點前
  • 2,簡單使用
    • (1)判斷某個標簽是否被選中
    • (2)選擇當前頁面的任何一個節點(雙斜杠//)
    • (3)選擇指定的標簽
  • 3,Lxml(在代碼中使用xpath語法)
    • (1)安裝
    • (2)使用
    • (3)爬取豆瓣電影

1,Xpath語法:

Xpath是一門從HTML中提取數據的一門語言
Xpath helper插件:幫助我們從element中定位數據

??爬蟲是爬不到element的內容的,這里使用插件只是讓其幫助我們學習xpath中的語法,從url地址中的響應中提取數據,只有response內容和element中內容相同時,才可以使用此工具提取數據,否則只能看response內容才能去提取,當然xpath語法簡單,看就能看到。

(1)選擇節點(標簽)

-- /html/head/meta:能夠選中html下的head下的所有的meta標簽

(2)“//”:能從任意節點開始選擇

“//li”:當前頁面下的所有li標簽
“/html/head//link”:選擇head下的所有link標簽(head下的任意一級都會被選中)

(3)“@”符號的用途

定位元素:“//ul[@class="topic_ul"]/li”
選擇class="topic_ul"的ul標簽下的li標簽
“/a/@href”: 選擇a標簽的href屬性值

(4)獲取文本

“/a/text()”: 獲取文本(標簽a中包含的文本)
“/a//text()”: 獲取a標簽下的所有文本,即便a標簽下有其他標簽,所有的文本都會得到

(5)點前

“./a”:當前節點下的a標簽

相應方法可到w3cschool中查找,上面學到的已經能解決80%的問題了

@可以定位一個屬性,一個節點
選擇節點(標簽)

2,簡單使用

在這里插入圖片描述

(1)判斷某個標簽是否被選中

在這里插入圖片描述

如下,選擇全部的meta都選擇上了

在這里插入圖片描述

(2)選擇當前頁面的任何一個節點(雙斜杠//)

??我們如果從根路徑,一個一個的去找太麻煩了,而且使用鼠標找到某一標簽后,使用//可以得到當前頁面的任意節點。
??可以選擇整個頁面下的任何一個li標簽
在這里插入圖片描述

(3)選擇指定的標簽

@符號能選擇指定屬性的值
[]能對選擇的標簽進行限定

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

3,Lxml(在代碼中使用xpath語法)

(1)安裝

pip install lxml

(2)使用

from lxml import etreeelement = etree.HTML("html字符串")     #etree可以將HTML的字符串轉換成一個對象
element.xpath("/html/head/meta")                         #此時可以對此對象使用xpath語法了

(3)爬取豆瓣電影

在這里插入圖片描述

在這里插入圖片描述

下方式爬取豆瓣電影排行榜的某一頁的電影信息的爬蟲程序

#-*- codeing = utf-8 -*- 
#@Time : 2020/12/10 14:50
#@Author : 招財進寶
#@File : 09_try_lxml.py
#@Software: PyCharmimport requests
from lxml import etreeurl="https://movie.douban.com/chart"headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}response = requests.get(url,headers=headers)
html_str = response.content.decode()
#print(html_str)#使用etree處理數據html = etree.HTML(html_str)     #etree可以將HTML的字符串轉換成一個對象
print(html)                          #一個element對象,可以進行xpath撰寫#此時可以對此對象使用xpath語法了# #1.獲取所有的電影的url地址
# url_list = html.xpath("//div[@class='indent']/div/table//div[@class='pl2']/a/@href")
# print(url_list)
#
# #2.獲取所有的圖片的url地址
# img_list = html.xpath("//div[@class='indent']/div/table//a[@class='nbg']/img/@src")
# print(img_list)#3.需要把每部電影組成一個字典,字典中是電影的多重數據,如標題,url,圖片地址,評論數,評分
#  思路:#1.分組#2.每一組提取數據ret1 = html.xpath("//div[@class='indent']/div/table")           #通過此中方式先對每個模塊進行分組
print(ret1)     #[<Element table at 0x278cea01708>, <Element table at 0x278bed91708>,共10個table的對象for table in ret1:item = {}item["title"]=table.xpath(".//div[@class='pl2']/a/text()")[0].replace("/","").strip()       #此處只有中文的電影名#print(item["title"])item["href"] = table.xpath(".//div[@class='pl2']/a/@href")[0]item["img"] = table.xpath(".//a[@class='nbg']/img/@src")[0]item["comment_num"] = table.xpath(".//span[@class='pl']/text()")[0]item["rating_num"] = table.xpath(".//span[@class='rating_nums']/text()")[0]print(item)

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

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

相關文章

ArcGIS Pro SDK (七)編輯 7 操作Blob字段

ArcGIS Pro SDK &#xff08;七&#xff09;編輯 7 操作Blob字段 目錄 ArcGIS Pro SDK &#xff08;七&#xff09;編輯 7 操作Blob字段1 使用屬性檢查器讀取和寫入 Blob 字段2 在回調中使用行游標讀取和寫入 Blob 字段 環境&#xff1a;Visual Studio 2022 .NET6 ArcGIS Pro…

計算機網絡面試TCP篇之TCP三次握手與四次揮手

TCP 三次握手與四次揮手面試題 任 TCP 虐我千百遍&#xff0c;我仍待 TCP 如初戀。 巨巨巨巨長的提綱&#xff0c;發車&#xff01;發車&#xff01; PS&#xff1a;本次文章不涉及 TCP 流量控制、擁塞控制、可靠性傳輸等方面知識&#xff0c;這些知識在這篇&#xff1a; TCP …

第3章:數據結構

樹 對稀疏矩陣的壓縮方法有三種&#xff1a; 1、三元組順序表 2、行邏輯連接的順序表 3、十字鏈表 同義詞才會占用同個位置&#xff0c;從而需要進行多次比較。這些關鍵字的第一個可以不是e的同義詞&#xff0c;可以是排在e之前的關鍵字正好占了那個位置。 Dijkstra算法主要特點…

何處理Java中的ZipException異常?

如何處理Java中的ZipException異常&#xff1f; 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在Java編程中&#xff0c;處理壓縮文件&#xff08;如ZIP文件…

jenkins 發布服務到 windows服務器

1.環境準備 1.1 這些就不過多描述了&#xff0c;可以參考我的另一盤文章部署到linux。 jenkins 發布服務到linux服務器-CSDN博客 1.2 需要再windows上安裝openssh 地址&#xff1a;Releases PowerShell/Win32-OpenSSH GitHub 到windows上執行安裝&#xff0c;可以里面cmd命令…

【Oracle運維】導出數據庫中的數據SQL查詢結果保存到文件

Oracle SQL查詢結果導出到文件、SET命令用法學習 1 概述2 導出到文件的方法2.2 命令行方式-sqlplus方式導出指定SQL查詢的結果到csv文件步驟1&#xff1a;system或者實際其他的oracle賬號登錄到sqlplus命令行界面**步驟2&#xff1a;執行SQL查詢語句前的設置目標導出文件內容格…

Java的限制序列化和常用IO流

一.限制序列化 a.問題 出于安全考慮&#xff0c;對于一些比較敏感的信息(如用戶密碼)&#xff0c;應限制被序列化&#xff0c;如何實現? ◆使用transient關鍵字修改不需要序列化的對象屬性 b.示例 ◆希望Person類對象中的年齡信息不被序列化 二.Java常用IO流有哪些&#x…

人臉特征68點識別 C++

1、加載一張圖片 main函數&#xff1a; cv::Mat img cv::imread("5.jpg");vector<Point2f> points_vec dectectFace68(img);2、人臉68特征識別函數 在這里vector<Point2f> dectectFace68(Mat src) {vector<Point2f> points_vec;int* pResults …

【SpringCloud】Eureka源碼解析 上

Eureka是一個服務發現與注冊組件&#xff0c;它包含服務端和客戶端&#xff0c;服務端管理服務的注冊信息&#xff0c;客戶端簡化服務實例與服務端的交互。我們結合源碼來分析下eureka組件的實現原理&#xff0c;內容分為上下兩章&#xff0c;第一章分析eureka的服務注冊&#…

ubuntu apt命令 出現紅色彈框 Daemons using outdated libraries

1. 彈框沒截圖&#xff0c;是因為ubuntu22.04一個新特性導致的&#xff0c;由 needrestart 命令觸發&#xff0c;默認情況是交互性質的&#xff0c;也就是會中斷在這里需要手動要處理提示。 2. 修改/etc/needrestart/needrestart.conf 文件&#xff0c;將 #$nrconf{restart} …

【區分vue2和vue3下的element UI PageHeader 頁頭組件,分別詳細介紹屬性,事件,方法如何使用,并舉例】

在 Vue 2 中&#xff0c;Element UI 并沒有一個直接命名為 PageHeader 的組件。然而&#xff0c;你可能是在尋找一種方式來創建自定義的頁頭&#xff08;Page Header&#xff09;&#xff0c;這通常是通過組合 Element UI 的其他組件&#xff08;如 el-header、el-row、el-col、…

大數據開發中如何計算用戶留存及SQL示例

在大數據開發領域&#xff0c;用戶留存是一個關鍵指標&#xff0c;它反映了產品吸引并保留用戶的能力。 留存率的計算不僅有助于評估產品的健康狀況&#xff0c;還能為產品優化和市場策略提供重要依據。 本文將詳細介紹如何在大數據開發中計算用戶留存&#xff0c;并附帶具體…

gpu是什么?

GPU&#xff08;Graphics Processing Unit&#xff0c;圖形處理單元&#xff09;是一種專門在個人電腦、工作站、游戲機以及一些移動設備&#xff08;如平板電腦、智能手機等&#xff09;上進行圖像和圖形相關運算工作的微處理器。以下是關于GPU的詳細解釋&#xff1a; 1. **定…

精密空氣加熱器負載組

小型便攜式 &#xff1a;精密空氣加熱器&#xff08;負載組&#xff09;能夠對數據中心熱通道/冷通道冷卻系統進行全面測試。EAK 是一款 19 英寸機架式設備&#xff08;10U 高&#xff09;&#xff0c;可輕松安裝到各種標準服務器機架中。通過集成可調節的熱量水平&#xff08;…

決策樹算法介紹:原理與案例實現以及Python、R、Java、 MATLAB中使用

決策樹&#xff08;Decision Tree&#xff09;是一種常用的機器學習算法&#xff0c;適用于分類和回歸任務。它通過一系列的二分決策將數據逐步劃分成不同的子集&#xff0c;直到每個子集中的數據點具有較高的同質性。下面介紹決策樹的基本原理&#xff0c;并通過Python實現一個…

C++ :lambda表達式

目錄 lambda表達式書寫格式&#xff1a; lambda表達式各部分說明&#xff1a; lambda的使用示范&#xff1a; 注意事項&#xff1a; 返回值類型可以省略&#xff0c;參數也可也省略&#xff1a; sort內部也可以直接寫lambda表達式&#xff1a; 排序時利用lambda進行排序…

STM32MP135裸機編程:使用軟件觸發硬件復位

0 參考資料 STM32MP13xx參考手冊.pdf 1 使用寄存器實現軟件復位 1.1 復位電路概述 重點關注下面標紅的路線&#xff1a; 通過這條路線可以清楚看到&#xff0c;我們可以通過設置RCC_MP_GRSTCSETR寄存器讓RPCTL&#xff08;復位脈沖控制器&#xff09;給NRST&#xff08;硬件復…

蘋果可能與谷歌合作推AI訂閱服務;全國首個司法審判大模型在深圳上線

&#x1f989; AI新聞 &#x1f680; 蘋果可能與谷歌合作推AI訂閱服務 摘要&#xff1a;蘋果宣布將與OpenAI合作推出Apple Intelligence&#xff0c;并有望在今年秋季與谷歌達成合作&#xff0c;接入Gemini。Meta的Llama因質量不佳被拒。蘋果計劃推出訂閱模式的智能功能服務&…

Oracle PL / SQL 存儲過程

PL / SQL存儲過程不返回值。他們執行他們的指示并返回。您不能在賦值語句&#xff08;如函數&#xff09;的右側使用存儲過程。 創建存儲過程 以下代碼是一個非常簡單的存儲過程示例。 它基于SYS.DBMS_LOCK包的程序sleep&#xff08;數量&#xff09;。 此存儲過程將停止執行…

在 C++的跨平臺開發中,如何處理不同操作系統和編譯器之間的細微差異,以確保程序能夠穩定且高效地運行?

在 C 的跨平臺開發中&#xff0c;處理不同操作系統和編譯器之間的細微差異是非常重要的。以下是一些處理差異的技巧&#xff1a; 使用條件編譯&#xff1a;使用預處理指令&#xff0c;根據不同的操作系統和編譯器來編寫不同的代碼。 #if defined(_WIN32)// Windows 特定代碼 …