SVG簡述說明
SVG是用于描述二維矢量圖形的一種圖形格式。它基于XML描述圖形,對圖形進行放大或縮小操作都不會影響圖形質量。
由于SVG中的圖形代表的也是一個個文字,所以在使用時必須在后端或前端將真實的文字與對應的SVG圖形進行映射和替換。
實例
-
下圖中我們可以看到在定位源代碼中的電話部分的html文件的標簽內容(單個號碼數字)都是一樣的,我們需要去尋找真正的源代碼內容
大眾點評示例 -
在Network中尋找搜索
真正的源代碼部分 -
需要對比其數字代碼所代表的數字,獲得數字映射(其中1正常顯示的)
映射 - 這樣子我們就很簡單的進行電話號碼的獲取了
代碼示例(大眾點評)(需添加已登錄的請求頭信息)
import requests
from lxml import etree
from copyheaders import headers_raw_to_dict
# 定義映射關系
mappings= {
'\uf8e2':'0',
'\uf42d':'2',
'\uf5c1':'3',
'\uf5d4':'4',
'\ue71d':'5',
'\ue4f5':'6',
'\uf2c0':'7',
'\uf223':'8',
'\uea15':'9'
}
mappings_list = []
url = 'http://www.dianping.com/shop/G41TRhMLL80DPFTN'
h = '''
添加請求頭
'''
h = bytes(h, encoding="utf-8")
headers = headers_raw_to_dict(h)
respones = requests.get(url, headers=headers)
company_html = etree.HTML(respones.text)
# print(company_data)
nums = company_html.xpath('//p[@class="expand-info tel"]//text()')
print('查詢結果:', nums)
for i in nums:
if '1' in i or ' ' in i:
mappings_list.append(i)
continue
num = mappings.get(i)
if num is None:
continue
mappings_list.append(num)
print(''.join(mappings_list))
- 返回輸出
查詢結果: [' ', '電話:', ' ', '\uf8e2', '\uf42d', '1-', '\ue4f5', '\uf5d4', '\uf8e2', '\uf5c1', '\uf8e2', '\uf2c0', '\uf5c1', '1 ']
021-64030731
完