案例---->2022年最新版某某点评
需求:
获取餐饮店铺信息
思路讲解:
(1)打开开发者工具查看
(2)查看源代码
(3)从以上两个图可以看出,此处使用了字体加密。直接前往开发者模式的网络下载字体
(4)此处我们需要用到 fontcreator 软件(备注:在普通的网站开发中我们可以直接用百度
的网页软件打开 woff 文件–http://fontstore.baidu.com/static/editor/index.html,但是此处网页显
示错误,所以我们就用 fontcreator )
(5)我们现在使用软件将二个字体文件打开
(6)在这几个 woff 文件里所有的文字数据都一样,顺序也一样。但是每个文字对应的unicode 码在不同文件里可能不一样。例如园在 afbf2602.woff 里就是 ee0b。那么园对应的unicode 码可能是两个甚至多个。这样我们在生成字典的时候,就要注意,可能 2 个 key 对应值是一样的。例如:{”ee0b”:”园”,” f3e9” :”园”},如果有重复的键那么用第一次出现的,这个地方需要根据具体情况具体分析。
(7) 将项目存放到如下所示
(8)我们通过分析以上文件。生成一个 unicode 码对应的文字表,完整代码如下:
import requests
from lxml import etree
from fontTools.ttLib import TTFont
def css_decode(rep):
filenames=["20f6473e.woff","bbbaac2f.woff"]
data={}
character = list(
'1234567890店中美家馆小车大市公酒行国品发电金心业商司超生装园场食有新限天面工'
'服海华水房饰城乐汽香部利子老艺花专东肉菜学福饭人百餐茶务通味所山区门药银农龙停尚安'
'广鑫一容动南具源兴鲜记时机烤文康信果阳理锅宝达地儿衣特产西批坊州牛佳化五米修爱北养'
'卖建材三会鸡室红站德王光名丽油院堂烧江社合星货型村自科快便日民营和活童明器烟育宾精'
'屋经居庄石顺林尔县手厅销用好客火雅盛体旅之鞋辣作粉包楼校鱼平彩上吧保永万物教吃设医'
'正造丰健点汤网庆技斯洗料配汇木缘加麻联卫川泰色世方寓风幼羊烫来高厂兰阿贝皮全女拉成'
'云维贸道术运都口博河瑞宏京际路祥青镇厨培力惠连马鸿钢训影甲助窗布富牌头四多妆吉苑沙'
'恒隆春干饼氏里二管诚制售嘉长轩杂副清计黄讯太鸭号街交与叉附近层旁对巷栋环省桥湖段乡'
'厦府铺内侧元购前幢滨处向座下県凤港开关景泉塘放昌线湾政步宁解白田町溪十八古双胜本'
'单同九迎第台玉锦底后七斜期武岭松角纪朝峰六振珠局岗洲横边济井办汉代临弄团外塔杨铁浦'
'字年岛陵原梅进荣友虹央桂沿事津凯莲丁秀柳集紫旗张谷的是不了很还个也这我就在以可到错'
'没去过感次要比觉看得说常真们但最喜哈么别位能较境非为欢然他挺着价那意种想出员两推做'
'排实分间甜度起满给热完格荐喝等其再几只现朋候样直而买于般豆量选奶打每评少算又因情找'
'些份置适什蛋师气你姐棒试总定啊足级整带虾如态且尝主话强当更板知己无酸让入啦式笑赞'
'片酱差像提队走嫩才刚午接重串回晚微周值费性桌拍跟块调糕'
)
for filename in filenames:
font=TTFont("./css/"+filename)
keys=font.getGlyphOrder()[2:]
for index,value in enumerate(keys):
if value[3:] not in data:
data[value[3:]]=character[index]
# 5、利用data字典,进行内容替换
for k, v in data.items():
rep = rep.replace(f'&#x{k};', v)
return rep
def main():
url = 'http://www.dianping.com/changsha/ch10/g110'
headers={
'cookie':'_lxsdk_cuid=173c90e228dc8-047c6958b0f61-7b2d3714-144000-173c90e228dc8; _lxsdk=173c90e228dc8-047c6958b0f61-7b2d3714-144000-173c90e228dc8; fspop=test; _hc.v=d31fa191-b1de-097a-bf3f-b9509b546fc7.1599644053; cy=344; cye=changsha; _lx_utm=utm_source%3DBaidu%26utm_medium%3Dorganic; Hm_lvt_602b80cf8079ae6591966cc70a3940e7=1599644054,1599644059; Hm_lpvt_602b80cf8079ae6591966cc70a3940e7=1599644068; _lxsdk_s=17472372ed6-6bf-9ed-9b1%7C%7C85; s_ViewType=10',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36 Maxthon/5.2.6.1000',
'Referer':'http://www.dianping.com/changsha/ch10/g110',
}
#解析css
rep=requests.get(url,headers=headers).text
rep=css_decode(rep)
tree=etree.HTML(rep)
li_list=tree.xpath('//div[@class="content"]/div/ul/li')
for li in li_list:
title=li.xpath('.//div[@class="tit"]/a/h4/text()')[0].strip()
evaluation=li.xpath('string(.//div[@class="comment"]/a[@class="review-num"])').replace("\n","").strip()
tag=li.xpath('string(.//div[@class="tag-addr"]/a/span)')
print(f"标题:{title},{evaluation},标签为:{tag}")
if __name__ == '__main__':
main()