# -*- coding: utf-8 -*-
import requests
import re
from fontTools.ttLib import TTFont
from lxml import etree
import urllib.parse
'''获取字体文件下载连接'''
def get_woffs_url(data):
svgtextcss = re.findall(r'href="([^"]+svgtextcss[^"]+)"', data)[0]
woffs_url = 'http:' + svgtextcss
woff_text = requests.get(woffs_url).text
lines = woff_text.split('PingFangSC-')
json_woff = {}
for line in lines:
woff_urls = re.findall('([^"]+woff)"\)', line)
type = re.findall('} .(.*?){', line)
if len(woff_urls) > 0 and len(type) > 0:
json_woff[type[0]] = 'http:' + woff_urls[0]
return json_woff
'''下载字体文件'''
def download(woffs_url:dict):
for woff_name, url in woffs_url.items():
with open('./file/woffs/{}.woff'.format(str(woff_name)), 'wb') as writer:
writer.write(requests.get(url).content)
'''将下载得到的字体文件转换成xml文件'''
def woff_to_xml():
font = TTFont('file/woffs/reviewTag.woff')
font.saveXML('./file/woffs/reviewTag.xml')
font = TTFont('file/woffs/address.woff')
font.saveXML('./file/woffs/address.xml')
font = TTFont('file/woffs/shopNum.woff')
font.saveXML('./file/woffs/shopNum.xml')
font = TTFont('file/woffs/tagName.woff')
font.saveXML('./file/woffs/tagName.xml')
'''根据字体文件获取码表'''
def get_dict(woff_path):
woff_dict = {'e744': '1', 'f74c': '2', 'f1a0': '3', 'f5d3': '4', 'f875': '5', 'f88d': '6', 'e7a5': '7',
'e94d': '8', 'e357': '9', 'f47f': '0', 'f41a': '店', 'ea7c': '中', 'e0ce': '美', 'e889': '家',
'eefe': '馆', 'f600': '小', 'e3bd': '车', 'f64d': '大', 'e973': '市', 'f86c': '公', 'e0e8': '酒',
'efea': '行', 'f111': '国', 'f3bf': '品', 'e2ba': '发', 'f824': '电', 'f396': '金', 'f8e4': '心',
'ed70': '业', 'e789': '商', 'e931': '司', 'e2f0': '超', 'ebf8': '生', 'efb6': '装', 'ec60': '园',
'edbb': '场', 'e1d0': '食', 'f809': '有', 'f0bd': '新', 'e46d': '限', 'e2b2': '天', 'f79e': '面',
'e909': '工', 'e777': '服', 'e549': '海', 'e3cd': '华', 'ead8': '水', 'f14b': '房', 'f218': '饰',
'f76f': '城', 'edf6': '乐', 'e667': '汽', 'f76b': '香', 'e8a3': '部', 'e002': '利', 'f5ad': '子',
'efca': '老', 'e86d': '艺', 'e945': '花', 'ef7d': '专', 'f348': '东', 'f234': '肉', 'ebcb': '菜',
'ea88': '学', 'eed5': '福', 'ea4b': '饭', 'e90d': '人', 'f04e': '百', 'f240': '餐', 'eb25': '茶',
'ed0e': '务', 'e2c7': '通', 'f02b': '味', 'eec8': '所', 'e3cc': '山', 'f50c': '区', 'e952': '门',
'e9e1': '药', 'eac2': '银', 'e5fe': '农', 'f0d3': '龙', 'f28e': '停', 'f37e': '尚', 'ecd4': '安',
'f457': '广', 'f303': '鑫', 'eea6': '一', 'ea65': '容', 'eb46': '动', 'f0bf': '南', 'ee0d': '具',
'f5f8': '源', 'e733': '兴', 'e071': '鲜', 'f734': '记', 'eb38': '时', 'ea15': '机', 'f8ae': '烤',
'ecf2': '文', 'e81b': '康', 'f365': '信', 'ee4a': '果', 'e687': '阳', 'f888': '理', 'f7ac': '锅',
'f1dc': '宝', 'f5ce': '达', 'f752': '地', 'e052': '儿', 'f51d': '衣', 'f14a': '特', 'f700': '产',
'e411': '西', 'f2fa': '批', 'f2ce': '坊', 'e191': '州', 'e561': '牛', 'eaac': '佳', 'e4fb': '化',
'e39f': '五', 'eaa5': '米', 'f013': '修', 'e15c': '爱', 'f65c': '北', 'e215': '养', 'f58a': '卖',
'f08d': '建', 'e676': '材', 'f71d': '三', 'e80c': '会', 'e5fb': '鸡', 'f2e6': '室', 'e866': '红',
'e70d': '站', 'e726': '德', 'f5dd': '王', 'ef21': '光', 'f3f7': '名', 'e367': '丽', 'f3ea': '油',
'e793': '院', 'eb2e': '堂', 'ef32': '烧', 'e8f8': '江', 'e3b4': '社', 'e3a7': '合', 'f519': '星',
'ea3a': '货', 'e0c3': '型', 'f63a': '村', 'e308': '自', 'ebea': '科', 'f565': '快', 'f7ea': '便',
'ec9c': '日', 'efcd': '民', 'ed56': '营', 'edb4': '和', 'e248': '活', 'f64c': '童', 'f646': '明',
'ea96': '器', 'e386': '烟', 'edd0': '育', 'e5d1': '宾', 'e0b3': '精', 'e99a': '屋', 'e9ab': '经',
'ee85': '居', 'f1db': '庄', 'ed51': '石', 'e426': '顺', 'f5fe': '林', 'e419': '尔', 'e06f': '县',
'eab7': '手', 'f3b7': '厅', 'eb94': '销', 'e49f': '用', 'e4a4': '好', 'e0b0': '客', 'efe6': '火',
'e0a9': '雅', 'f680': '盛', 'eb66': '体', 'f001': '旅', 'f0ed': '之', 'f39d': '鞋', 'e8d6': '辣',
'ef2e': '作', 'f401': '粉', 'ef8d': '包', 'eaad': '楼', 'ee3b': '校', 'f213': '鱼', 'f5b9': '平',
'eee9': '彩', 'e37e': '上', 'e1d1': '吧', 'f8c2': '保', 'f60e': '永', 'e58a': '万', 'e536': '物',
'e8bb': '教', 'e90c': '吃', 'f017': '设', 'e65d': '医', 'e312': '正', 'f258': '造', 'f099': '丰',
'f447': '健', 'eb67': '点', 'f6ac': '汤', 'e610': '网', 'e6c7': '庆', 'f1c1': '技', 'f268': '斯',
'ea59': '洗', 'f3a0': '料', 'ed3f': '配', 'f5c8': '汇', 'e300': '木', 'f8d1': '缘', 'f0e6': '加',
'e2dc': '麻', 'e7de': '联', 'e3f0': '卫', 'e392': '川', 'e7e8': '泰', 'ea37': '色', 'f599': '世',
'e27d': '方', 'e900': '寓', 'e6eb': '风', 'e9ad': '幼', 'eeb1': '羊', 'ef47': '烫', 'f10b': '来',
'f8f1': '高', 'f697': '厂', 'e5af': '兰', 'e2d2': '阿', 'efd4': '贝', 'ea44': '皮', 'ed88': '全',
'f627': '女', 'f4e6': '拉', 'f69f': '成', 'e5c3': '云', 'f163': '维', 'f822': '贸', 'ef11': '道',
'f3cc': '术', 'f7be': '运', 'e0fd': '都', 'e6a2': '口', 'e2ea': '博', 'e7f2': '河', 'e706': '瑞',
'f16a': '宏', 'e8e3': '京', 'e01a': '际', 'ec0f': '路', 'f277': '祥', 'ec12': '青', 'ea05': '镇',
'e291': '厨', 'e75a': '培', 'e9aa': '力', 'f220': '惠', 'f6da': '连', 'e5d2': '马', 'e17f': '鸿',
'f6ec': '钢', 'e1fc': '训', 'e782': '影', 'eeb3': '甲', 'ea87': '助', 'e871': '窗', 'f505': '布',
'f031': '富', 'ec91': '牌', 'f86a': '头', 'e808': '四', 'eed8': '多', 'e98f': '妆', 'e04e': '吉',
'f1a3': '苑', 'e290': '沙', 'f168': '恒', 'e894': '隆', 'f375': '春', 'e629': '干', 'f232': '饼',
'f36b': '氏', 'efcb': '里', 'e3fe': '二', 'ee4f': '管', 'e023': '诚', 'e9a2': '制', 'e2bc': '售',
'e835': '嘉', 'e0e2': '长', 'ed37': '轩', 'f73a': '杂', 'ee96': '副', 'f747': '清', 'e6ad': '计',
'e31d': '黄', 'f1b7': '讯', 'f4e5': '太', 'f222': '鸭', 'f6bd': '号', 'e7eb': '街', 'f87a': '交',
'f1ae': '与', 'e846': '叉', 'e557': '附', 'e821': '近', 'f1c0': '层', 'f591': '旁', 'ea03': '对',
'f721': '巷', 'ec0e': '栋', 'e056': '环', 'e7b1': '省', 'e284': '桥', 'e922': '湖', 'e54d': '段',
'f738': '乡', 'f5ff': '厦', 'ef45': '府', 'ec40': '铺', 'f156': '内', 'e13a': '侧', 'ee2f': '元',
'e84e': '购', 'e1db': '前', 'edd5': '幢', 'edbe': '滨', 'e48e': '处', 'f704': '向', 'f055': '座',
'e753': '下', 'eda5': '臬', 'e780': '凤', 'ee1e': '港', 'e580': '开', 'eb1f': '关', 'f0c6': '景',
'efd8': '泉', 'f4d6': '塘', 'e89b': '放', 'f141': '昌', 'eb2a': '线', 'eb88': '湾', 'f50b': '政',
'ec76': '步', 'f7ba': '宁', 'f0e8': '解', 'e519': '白', 'f1d2': '田', 'f837': '町', 'e1be': '溪',
'e92a': '十', 'e452': '八', 'f5cf': '古', 'ecc6': '双', 'e724': '胜', 'ee7f': '本', 'f1c8': '单',
'f26a': '同', 'f32e': '九', 'e046': '迎', 'ee2b': '第', 'e8c9': '台', 'e0c0': '玉', 'e88a': '锦',
'e37f': '底', 'eca0': '后', 'e3ab': '七', 'e92d': '斜', 'ec17': '期', 'e7ac': '武', 'eaee': '岭',
'ef2b': '松', 'f352': '角', 'f51a': '纪', 'edde': '朝', 'e0dc': '峰', 'f1c6': '六', 'f491': '振',
'f0c5': '珠', 'f319': '局', 'f063': '岗', 'e81d': '洲', 'ecfb': '横', 'ed5a': '边', 'e60c': '济',
'f749': '井', 'f033': '办', 'f440': '汉', 'e0a0': '代', 'e205': '临', 'e7d6': '弄', 'ec59': '团',
'e309': '外', 'e2b0': '塔', 'eca3': '杨', 'f585': '铁', 'e6f0': '浦', 'f8fc': '字', 'f289': '年',
'e8ce': '岛', 'e45f': '陵', 'ec9a': '原', 'f6cc': '梅', 'e3aa': '进', 'f736': '荣', 'ec93': '友',
'f27d': '虹', 'f254': '央', 'f490': '桂', 'eba9': '沿', 'f61d': '事', 'ec4c': '津', 'f482': '凯',
'f0b1': '莲', 'e68d': '丁', 'e486': '秀', 'f32a': '柳', 'e3a1': '集', 'ef4c': '紫', 'e1a3': '旗',
'ec10': '张', 'e7fa': '谷', 'ea38': '的', 'ed0d': '是', 'e779': '不', 'f0e4': '了', 'f4ad': '很',
'ebdf': '还', 'f1de': '个', 'ea9e': '也', 'e898': '这', 'ed00': '我', 'eea7': '就', 'f723': '在',
'f45e': '以', 'f3c3': '可', 'f8e3': '到', 'e136': '错', 'e8de': '没', 'e0d2': '去', 'e437': '过',
'ec1a': '感', 'ec53': '次', 'f329': '要', 'f072': '比', 'ea6b': '觉', 'f3df': '看', 'ecc9': '得',
'f3f3': '说', 'e369': '常', 'e99f': '真', 'e20a': '们', 'f7c6': '但', 'e8fd': '最', 'f2f8': '喜',
'f1b6': '哈', 'e585': '么', 'f06c': '别', 'ea50': '位', 'e61b': '能', 'eab2': '较', 'f2cd': '境',
'f6df': '非', 'f642': '为', 'e62e': '欢', 'e92e': '然', 'f89d': '他', 'e336': '挺', 'f34e': '着',
'e5f8': '价', 'e75b': '那', 'ef3a': '意', 'e024': '种', 'e14e': '想', 'e86c': '出', 'eede': '员',
'f74d': '两', 'f7de': '推', 'ec25': '做', 'e951': '排', 'e3dc': '实', 'e02a': '分', 'f18a': '间',
'e7ff': '甜', 'ea54': '度', 'f025': '起', 'e6d1': '满', 'ed76': '给', 'f0b4': '热', 'e303': '完',
'e1b9': '格', 'eda6': '荐', 'f2e1': '喝', 'e884': '等', 'e4fc': '其', 'e22e': '再', 'e1fa': '几',
'f176': '只', 'e005': '现', 'e42c': '朋', 'e823': '候', 'e62b': '样', 'eb55': '直', 'e8da': '而',
'e006': '买', 'ee16': '于', 'ee66': '般', 'f1f2': '豆', 'f1e6': '量', 'f5ab': '选', 'e4e0': '奶',
'e289': '打', 'f5b7': '每', 'f7fc': '评', 'e9af': '少', 'e0b2': '算', 'e711': '又', 'e520': '因',
'e626': '情', 'f892': '找', 'ee5a': '些', 'ede0': '份', 'e895': '置', 'ea2b': '适', 'eace': '什',
'f1a8': '蛋', 'e77e': '师', 'eb71': '气', 'e143': '你', 'e060': '姐', 'e408': '棒', 'f810': '试',
'e36a': '总', 'ef97': '定', 'ecd5': '啊', 'eb87': '足', 'e7ad': '级', 'e9d1': '整', 'f720': '带',
'eee3': '虾', 'e58f': '如', 'f442': '态', 'efeb': '且', 'e479': '尝', 'ea56': '主', 'edad': '话',
'f676': '强', 'e2c3': '当', 'ecce': '更', 'ef51': '板', 'f20b': '知', 'e54f': '己', 'e9c9': '无',
'ead6': '酸', 'ef26': '让', 'e983': '入', 'e373': '啦', 'ec86': '式', 'f2bf': '笑', 'e168': '赞',
'e970': '片', 'f84b': '酱', 'e7b0': '差', 'ecec': '像', 'f11a': '提', 'f1e9': '队', 'f4af': '走',
'f21a': '嫩', 'e6b2': '才', 'e16c': '刚', 'f52d': '午', 'e628': '接', 'ec96': '重', 'e675': '串',
'f37f': '回', 'e9b2': '晚', 'e566': '微', 'e998': '周', 'e24b': '值', 'e993': '费', 'e343': '性',
'f86d': '桌', 'e31c': '拍', 'e351': '跟', 'f311': '块', 'f6c8': '调', 'e575': '糕'}
font1 = TTFont(woff_path)
uni_list = [x.replace("uni", "") for x in font1.getGlyphOrder()[2:]]
ys_index = list(woff_dict.values())
data = dict(zip(uni_list, ys_index))
return data
'''点评网搜索'''
def dp_search(city_id,keywords):
try:
session = requests.session()
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36',
'Cookie': 'showNav=#nav-tab|0|0; navCtgScroll=0; _lxsdk_cuid=179e55fa5a3c8-09651ed9172fa2-3323765-1fa400-179e55fa5a3c8; _hc.v=06fb0561-739c-eaf9-3dbb-e47e37ae8f04.1623050922; switchcityflashtoast=1; s_ViewType=10; uuid=2D20B43C6B114568467F8EC008E4AB0ACDA19DF606F6AC3ACE07621E7A237B99; iuuid=2D20B43C6B114568467F8EC008E4AB0ACDA19DF606F6AC3ACE07621E7A237B99; _lxsdk=2D20B43C6B114568467F8EC008E4AB0ACDA19DF606F6AC3ACE07621E7A237B99; cityid=8; _tr.u=BwLwXA7OeECrZB3G; ta.uuid=1405083339794395194; isUuidUnion=true; ll=7fd06e815b796be3df069dec7836c3df; ua=%E4%BC%9F%E5%A4%A7%E7%9A%84%E7%89%9B%E5%85%88%E7%94%9F; ctu=8c598eab76f0a44fb51e5bf9d464e88b7cb98a6781e1d3f111551d884a61d9f6; default_ab=citylist%3AA%3A1%7Cshop%3AA%3A11%7C'
}
url = f'https://www.dianping.com/search/keyword/{city_id}/0_{urllib.parse.quote(keywords)}'
print(url)
resp = session.get(url, headers=headers)
resp.encoding = 'utf8'
html=etree.HTML(resp.text.replace("&#x","").replace(";",""))
li_item=html.xpath('//*[@id="shop-all-list"]/ul//li')
download(get_woffs_url(resp.text))
address_dict = get_dict('file/woffs/address.woff')
shop_num_dict = get_dict('file/woffs/shopNum.woff')
tag_name_dict = get_dict('file/woffs/tagName.woff')
data_list=[]
if li_item:
for index,item in enumerate(li_item):
data={}
data["title"]=title[0] if(title:=item.xpath(f'//*[@id="shop-all-list"]/ul/li[{index+1}]/div[2]/div[1]/a[1]/h4/text()')) else "-"
shop_num=shopNum if (shopNum := item.xpath(f'//*[@id="shop-all-list"]/ul/li[{index+1}]/div[2]/div[2]/a[1]/b//text()')) else "-"
data["shop_num"]=""
for x in shop_num:
try:
data["shop_num"]+=shop_num_dict[x]
except Exception as ex:
data["shop_num"]+=x
#
data["addr"] = ""
addr = addr if (addr := item.xpath(f'//*[@id="shop-all-list"]/ul/li[{index + 1}]/div[2]/div[3]/span//text()')) else "-"
for x in addr:
try:
data["addr"]+=address_dict[x]
except Exception as ex:
data["addr"]+=x
#
data["tag_name"]=""
tag_ame=tagName if (tagName := item.xpath(f'//*[@id="shop-all-list"]/ul/li[{index + 1}]/div[2]/div[3]/a[2]/span//text()')) else "-"
for x in tag_ame:
try:
data["tag_name"]+=tag_name_dict[x]
except Exception as ex:
data["tag_name"]+=x
#
data["per_capita"]=""
per_capita=per if (per := item.xpath(f'//*[@id="shop-all-list"]/ul/li[{index + 1}]/div[2]/div[2]/a[2]/b//text()')) else "-"
for x in per_capita:
try:
data["per_capita"] += shop_num_dict[x]
except Exception as ex:
data["per_capita"]+=x
data_list.append(data)
return data_list
except Exception as ex:
return None
dp_search(8,"肯德基")
大众点评网根据关键词和城市id返回搜索结果-爬虫源码示例
最新推荐文章于 2024-11-04 10:40:57 发布