解析資料 正則,xpath

2022-09-06 06:21:12 字數 3955 閱讀 6255

正規表示式拆分

importre#

1.拆分字串

one = '

asdsfsgsh'#

標準 是 s 為拆分

pattern = re.compile('s'

)result =pattern.split(one)

#print(result)

#2.匹配中文

two = '

網頁是最新版本的,適配移動端'#

python中 匹配中問 [a-z] unicode的範圍 * + ?

pattern = re.compile('

[\u4e00-\u9fa5]+')

result =pattern.findall(two)

print(result)

import

reimport

requests

url = '

'headers =

#response.text 不太準確 轉碼 是靠推測

data = requests.get(url, headers=headers).content.decode()

#正則解析 資料

#每個新聞的titile, url

#民營經濟再吃定心丸,民企當體會怎樣深意

pattern = re.compile('

(.*?)')

#pattern = re.compile('',re.s)

result =pattern.findall(data)

print

(result)

#with open('02news.html', 'w') as f:

#f.write(data)

xpath解析
import

reimport

requests

#安裝支援 解析html和xml的解析庫 lxml

#pip install lxml

from lxml import

etree

url = '

'headers =

#response.text 不太準確 轉碼 是靠推測

data = requests.get(url, headers=headers).content.decode()

#1.轉解析型別

xpath_data =etree.html(data)

#xpath 語法 1. 節點 /

#2. 跨節點: //

#3. 精確的標籤: //a[@屬性="屬性值"]

#4. 標籤包裹的內容 text()

#5. 屬性:@href

#xpath--s資料型別---list

#2呼叫 xpath的方法

result = xpath_data.xpath('

/html/head/title//text()')

result = xpath_data.xpath('

//a/text()')

result = xpath_data.xpath('

//a[@mon="ct=1&a=2&c=top&pn=18"]/text()')

result = xpath_data.xpath('

//a[@mon="ct=1&a=2&c=top&pn=18"]/@href')

result = xpath_data.xpath('

//li/a/text()')

print

(result)

#with open('02news.html', 'w') as f:

#f.write(data)

注意事項

from  lxml import

etree

html = """

"""#1.轉型別

x_data =etree.html(html)

#2.xpath 下標 是從 1開始; 只能取 平級關係的標籤

result = x_data.xpath('

//li[5]/text()')

result = x_data.xpath('

/html/body/ul/li/a/text()')

result = x_data.xpath('

//a[2]')

print(result)

拆分例項

import

requests

from lxml import

etree

import

json

class

btcspider(object):

def__init__

(self):

self.base_url = '

'self.headers =

self.data_list =

#1.發請求

defget_response(self, url):

response = requests.get(url, headers=self.headers)

#網頁的 編碼到底 是 gbk 還是 urf-8 head--meta-charset=""

#原因 是 抓取 網頁的 編碼 就是 gbk的 所以 解碼的時候 也是要gbk

#data = response.content.decode('gbk')

data =response.content

return

data

#2.解析資料

defparse_data(self, data):

#使用xpath 解析當前頁面 所有的 新聞title 和url 儲存

#1.轉型別

x_data =etree.html(data)

#2.根據xpath路徑解析

#路徑 1. 純手寫 2. 借助瀏覽器的 右擊 貼上xpath路徑; 需要修改

title_list = x_data.xpath('

//a[@class="s xst"]/text()')

#title_list = x_data.xpath('//form[@id="moderate"]/div/div[2]/div/a[@class="s xst"]/text()')

url_list = x_data.xpath('

//a[@class="s xst"]/@href')

for index, title in

enumerate(title_list):

news ={}

#print(index)

#print(title)

news['

name

'] =title

news[

'url

'] =url_list[index]

#3.儲存資料

defs**e_data(self):

#將 list---str

data_str =json.dumps(self.data_list)

with open(

'05btc.json

', 'w'

) as f:

f.write(data_str)

#4.啟動

defrun(self):

for i in range(1, 5):

#1.拼接 完整url

url = self.base_url + str(i) + '

.html

'print

(url)

#2.發請求

data =self.get_response(url)

#3.做解析

self.parse_data(data)

#4.儲存

self.s**e_data()

btcspider().run()

Xpath解析資料

xpath,xml path language。是一種小型的查詢語言,是一門在xml文件中查詢的語言。優點 可以在xml中查詢資訊 支援html的查詢 可通過元素和屬性進行導航。xpath的樹形結構 使用xpath選取節點 表示式描述nodename 選取此節點的所有子節點 從根節點擊擇 從匹配選擇...

xpath解析基礎

import requests from lxml import etree if name main headers ua偽裝 例項化好了乙個etree物件,且將被解析的檔案載入到了物件中 tree etree.parse test.html r tree.xpath html body div ...

xpath解析基礎

xpath解析 最常用且最便捷高校的一種解析方式。通用性。xpath解析原理 1.例項化乙個etree的物件,且需要將被解析的頁面原始碼資料載入到該物件中。2.呼叫etree物件中的xpath方法結合著xpath表示式實現標籤的定位和內容的捕獲。環境的安裝 pip install lxml 如何例項...