日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

爬虫---数据解析

發布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫---数据解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據解析

  • 數據解析
    • 網頁數據和結構
      • 網頁數據格式
      • 網頁結構
    • 數據解析技術
    • 正則表達式
    • XPath與lxml解析庫
    • Beautiful Soup
    • JSONPath與json模塊
        • json模塊介紹

數據解析

網頁數據和結構

網頁數據格式

網頁結構

數據解析技術

Python 支持網頁解析技術:正則表達式、XPath、Beautiful Soup、JSONPath
(1)針對文本的解析,正則表達式
(2)針對HTML/XML的解析,XPath、Beautiful Soup、正則表達式
(3)針對JSON的解析,JSONPath
網頁源代碼字符串–>網頁解析器–>價值數據、新URL列表

區別:
正則表達式:基于文本特征匹配或查找指定的數據,可以處理任何格式的字符串文檔,模糊匹配
XPath、Beautiful Soup基于HTML/XML文檔的層次結構來確定到達指定節點的路徑,適合處理層級比較明顯的數據
JSONPath專門用于JSON文檔的解析

正則表達式

re模塊的使用:
1.使用compile()函數將正則表達式以字符串的形式編譯為一個Pattern類型的對象。
2.通過Pattern對象提供的方法對文本進行查找或替換,得到一個處理的結果。
3.使用處理的結果提供屬性和方法獲得信息

import re
title="你好,hello,世界"#待匹配的字符串
# 創建正則表達式,用于只匹配中文
pattern=re.compile(r"[\u4e00-\u9fa5]+")
result=pattern.findall(title)
print(result)
# ['你好', '世界']

XPath與lxml解析庫

5.4.1 XPath概述
5.4.2 XPath語法
1. 節點選取
nodename 選取此節點的所有子節點
/ 從根節點選取
// 從匹配選擇的當前節點選取文檔中的節點,而不考慮他們的位置
. 選取當前節點
… 選取當前節點的父節點
@ 選取屬性
3.選取位置節點
* 匹配任何元素節點
@* 匹配任何屬性節點
node()匹配任何類型的節點
5.4.4 lmxl庫
1. Element類:XML的節點創建節點對象:root=etree.Element(‘root’)

Beautiful Soup

5.5.2 創建Beautiful Soup對象
Beautiful Soup構造方法ruxia:
def_init_(self,amrkup="",features=None,builder=None,parse_only=None,from_encoding=None,exclude_encding=None,**kwargs)

    1.markup:解析的文檔字符串或文件對象2.features:解析器名稱3.builder:表指定的解析器4.from_encoding:表指定的編碼格式5.exclude——encoding:表排除的編碼格式
# 創建對象
from bs4 import BeautifulSoupsoup=BeautifulSoup(html_doc,'lxml')

5.5.3通過操作方法進行解讀搜索
1.find():查找符合條件的第一個標簽節點
2.find_all():查找所有符合條件的標簽節點,并返回一個列表

find_all=(self,anme=None,attrs={},recursive=True,text=None,
limit=None,**Kwargs)
1.name:所有名字為name的標簽,但字符串會被忽略。

#傳入字符串:soup.find_all('b')
#傳入正則表達式:
import re
for tag in soup.find_all(re.compile("^b")):print(tag.name)
#         3).傳入列表:
soup.find_all(["a","b"])
#部分輸出結果如下:
# [<b>]The Dormouse's story</b>,

JSONPath與json模塊

JSON時比XML更簡單的數據交換格式,采用完全獨立于編程語言的文本格式來存儲和表示數據
1.使用鍵值對(key:value)表示對象屬性和值;
2. , 分隔多條數據
3. {} 包含對象
4. []表示數組
1.JSON鍵值對
“name”:“JXUST”

2.JSON值
3.對象{“name”:“JXUST”,“age”:“63”}
4.數組
5.6.2JSON 與XML比較

json模塊介紹

json.loads()

import json
str_list='[1,2,3,4]'
str_dict='{"city":"贛州","name":"lj"}'
json.loads(str_list)
[1,2,3,4]
json.loads(str_dict)
{"city":"贛州","name":"lj"}

json.dumps()

import json
demo_list=[1,2,3,4]
demo_tuple=(1,2,3,4)
demo_dict={"city":"贛州","name":"lj"}
json.dumps(demo_list)
json.dumps(demo_tuple)
print(json.dumps(demo_dict))
print(json.dumps(demo_dict,ensure_ascii=False))

json.load()

import json
str_list1=json.load(open("listStr.json"))
print(str_list1)
str_dict1=json.load(open("dictStr.json"))
print(str_dict1)

json.dump()

import json
str_list2=[{"city":"贛州"},{"name":"lj"}]
json.dump(str_list2,open("listStr.json","w"),ensure_ascii=False)
demo_dict={"city":"贛州","name":"lj"}
json.dump(str_dict,open("dictStr.json","w"),ensure_ascii=False)

總結

以上是生活随笔為你收集整理的爬虫---数据解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。