針對網頁資料的分析提取,很多都是推薦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...