網頁資料提取requests etree

2021-10-05 03:15:58 字數 2880 閱讀 8447

針對網頁資料的分析提取,很多都是推薦bs4,個人比較喜歡etree,簡單方便。

大致的邏輯就是先requests請求某乙個url,得到網頁的源**(pages.content),然後通過etree對源**格式化,變成可解析的格式(etree.html),然後再用xpath提取你需要的內容就可以了,簡單的demo如下,提取乙個問卷調查的部分內容

import requests

from lxml import etree

import sys

all_url = ''

pages=requests.get(all_url,headers=headers)

selector = etree.html(pages.content)

for i in range(2,20):

data=selector.xpath(f'//*[@id="divtitle"]/text()')[0]

sys.stdout.write(f": "+data+'\n')

chooses=selector.xpath(f'//*[@id="divquestion"]/ul/li/label/text()')

for ch in chooses:

sys.stdout.write(ch)

常用的xpath方法如下:

# 

# xpath 基礎表示式:

/node 表示在xml文件的根目錄查詢結點名稱為node的結點

./node 表示在當前結點下查詢結點名稱為node的結點

//node 表示在xml文件中遞迴查詢結點名稱為node的節點

//* 表示在xml文件中查詢所有的結點,但是排除文字節點

//node() 表示在xml文件中查詢所有結點,包含文字節點

//text() 表示在xml文件中遞迴查詢所有的文字節點

//*/text()[contains(., 'test')] 表示在xml文件中遞迴查詢所有結點,條件為該結點的文字節點包含"test"

//node[@id] 表示在xml文件中遞迴查詢結點名稱為node的結點,條件為該結點必須含有id屬性

//node[id] 表示在xml文件中遞迴查詢結點名稱為node的結點,條件為該結點必須含有結點名稱為id的結點

//nodes[node/id] 表示遞迴查詢nodes結點,條件為nodes結點下必須有node結點,且node結點下必須有id結點

//nodes[@id]/node[id] 表示遞迴查詢含有id屬性的nodes結點下的node結點,條件為node結點下必須含有id結點

//nodes[@id]/node[0] 表示遞迴查詢含有id屬性的nodes結點下的第乙個node結點

//nodes[@id]/node[last()] 表示遞迴查詢含有id屬性的nodes結點下的最後乙個node結點

//nodes/node[position() < 4] 表示遞迴查詢nodes結點下索引小於4的node結點

//nodes[@id]/node[position() < last()] 遞迴查詢含有id屬性的nodes結點下除最後乙個結點外的node結點

/nodes/child::node()[name()='node'] 表示查詢nodes結點下結點名稱為node的子結點

/nodes/child::node 等同於/nodes/node表示查詢nodes下的node子結點

/nodes/node/attribute::id 等同於/nodes/node/@id表示查詢nodes結點下的node結點的id屬性

//nodes[@id='1001']/node[starts-with(@id, '1')] 表示查詢id屬性為1001的nodes結點下的id屬性以1開頭的node結點

//@*[ends-with(., '1')] 表示查詢以1結尾所有屬性

(//* | //@*)[substring(name(), 1, 5) = 'class'] 查詢所有結點名稱或屬性名稱的1到5之間的字元等於'class'的結點

//node[@attr!='-2' and @attr!='2'] 查詢所有node節點,其attr屬性不等於2和-2

# xpath 文件軸用途:

self 選擇當前節點

parent 選擇當前節點的父節點

child 選擇當前節點的所有子節點

attribute 選擇當前節點的所有屬性

ancestor 選擇當前節點的所有祖先,包括父節點、父節點的父節點等等

ancestor-or-self 選擇當前節點的祖先以及當前節點本身

descendant 選擇當前節點的所有後代,包括子節點、子節點的子節點等等

descendant-or-self 選擇當前節點的後代以及當前節點本身

preceding 選擇整個文件**現在當前節點前面的所有節點

preceding-sibling 選擇文件**現在當前節點前面的所有同胞節點(即與當前節點同級的節點)

following 選擇整個文件**現在當前節點後面的所有節點

following-sibling 選擇文件**現在當前節點後面的所有同胞節點(即與當前節點同級的節點)

namespace 選擇當前節點的所有命名空間節點

爬蟲之網頁資料提取

爬蟲流程 指定url 發請求收響應 解資料存資料 資料解析方法分類 正則 各程式語言都可以用 bs4 python獨有 xpath 重點,各種程式語言都可用 bs4.beautifulsoup 提供的方法和屬性 例項化beautifulsoup的方法 本地html檔案 例 beautifulsoup...

清洗網頁資料

ascii american standard code for information interchange美國標準資訊交換碼 只能表示128個字元 這個大家都是很熟悉的,從32是空格,然後是一堆符號,然後是48 57表示0 9,65 90是a z,97 122是a z。就是很少,也只有英文本母...

python 抓取網頁資料

利用python進行簡單的資料分析 1 首先要進行分析網頁的html,我們所要抓取的資料是根據銷量排名的手機資訊,所以主要需要抓取手機的型號 銷量,按照 由小見大 的方法來獲取所需要的html資訊,如下圖所示 由上可以看出手機型號所在的html標籤是 h3 手機 是在div中的class屬性為 pr...