‘’’
this is a module
‘’’
import re
from urllib import request
#断点调试 F5
class Spider():
‘’’
this is a class
‘’’
url = ‘https://live.ixigua.com/category/1/114/’
root_patten = ‘
def __fetch_content(self): #私有方法
'''
'''
r = request.urlopen(Spider.url)
#bytes
htmls = r.read()
htmls = str(htmls,encoding = 'utf-8')
a = 1
return htmls
def __analysis(self,htmls):
root_html = re.findall(Spider.root_patten,htmls)
anchor = []
for html in root_html:
name = re.findall(Spider,name_pattern,html)
number = re.findall(Spider.number_pattern,html)
anchor = {'name':name,'number':number}
anchors.append(anchor)
return anchors
def __refine(self,anchors):
l = lambda anchor:{
'name':anchor['name'][0].strip(),
'number':anchor['number'][0]
}
return map(l,anchors)
def __sort(self,anchors):
#filter
anchors = sorted(anchors,key=sefl.__sort_seed,reverse=True)
return anchors
def __sort_seed(self,anchor):
r = re.findall('\d*',anchor['number'])
number = float(r[0])
return anchor['number']
if '万'in anchor['number']:
number *=10000
return number
def __show(self,anchors):
for rank in range(0,len(anchors)):
print('rank '+ str(rank + 1)
+':'+anchors[rank]['name']
+' '+anchors[rank]['number'])
def go(self):
htmls = self.__fetch_content()
anchors = self.__analysis(htmls)
anchors = list(self.__refine(anchors))
anchors = self.__sort(anchors)
self.__show(anchors)
spider = Spider()
spider.go()
#因熊猫TV关闭,代码爆炸?
昨天的完结篇。。。虽然用不了。。。
eval 字符串转数值表达式
可以去括号内最外侧单双引号?
eval(expression[, globals[, locals]])
参数
expression – 表达式。
globals – 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
locals – 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
返回值
实例
以下展示了使用 eval() 方法的实例:
x = 7
eval( ‘3 * x’ )
21
eval(‘pow(2,2)’)
4
eval(‘2 + 2’)
4
n=81
eval(“n + 4”)
85
如果 eval (a[0:-1])内字符是‘12.3’
那么输出的是数字12.3
format 格式化函数
实例
“{} {}”.format(“hello”, “world”) # 不设置指定位置,按默认顺序
‘hello world’
“{0} {1}”.format(“hello”, “world”) # 设置指定位置
‘hello world’
“{1} {0} {1}”.format(“hello”, “world”) # 设置指定位置
‘world hello world’
实例
#!/usr/bin/python
#-- coding: UTF-8 --
print(“网站名:{name}, 地址 {url}”.format(name=“菜鸟教程”, url=“www.runoob.com”))
#通过字典设置参数
site = {“name”: “菜鸟教程”, “url”: “www.runoob.com”}
print(“网站名:{name}, 地址 {url}”.format(**site))
#通过列表索引设置参数
my_list = [‘菜鸟教程’, ‘www.runoob.com’]
print(“网站名:{0[0]}, 地址 {0[1]}”.format(my_list)) # “0” 是必须的
也可以向 str.format() 传入对象:
实例
#!/usr/bin/python
#-- coding: UTF-8 --
class AssignValue(object):
def init(self, value):
self.value = value
my_value = AssignValue(6)
print(‘value 为: {0.value}’.format(my_value)) # “0” 是可选的
数字格式化
下表展示了 str.format() 格式化数字的多种方法:
print("{:.2f}".format(3.1415926));
3.14
^, <, > 分别是居中、左对齐、右对齐,后面带宽度, : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。
- 表示在正数前显示 +,负数前显示 -; (空格)表示在正数前加空格
b、d、o、x 分别是二进制、十进制、八进制、十六进制。
此外我们可以使用大括号 {} 来转义大括号,如下实例:
实例
#!/usr/bin/python
#-- coding: UTF-8 --
print ("{} 对应的位置是 {{0}}".format(“runoob”))
end=
TempLate = ‘零一二三四五六七八九’
TempNumber = input()
for number in TempNumber:
print(TempLate[eval(number)],end=’’)
print()中增加end=""参数表示输出后不增加换行,多个print()可以连续输出。
温度转换
TempStr = input(‘请输入带有符号的温度值:’)
if TempStr[-1] in [‘F’,‘f’]:
C = (eval(TempStr[0:-1]) - 32)/1.8
print(‘转换后的温度是{:.2f}C’.format©)
elif TempStr[-1] in [‘C’,‘c’]:
F = 1.8*eval(TempStr[0:-1]) + 32
print(‘转换后的温度是{:.2f}F’.format(F))
else:
print(‘输入格式错误。’)
TempLate = ‘零一二三四五六七八九’
TempNumber = input()
for number in TempNumber:
print(TempLate[eval(number)],end=’’)
TempStr = input()
if TempStr[0] in (‘F’,‘f’):
C = (eval(TempStr[1:])-32)/1.8
print(‘C’’{:.2f}’.format©)
elif TempStr[0] in (‘C’,‘c’):
F = eval(TempStr[1:])*1.8+32
print(‘F’’{:.2f}’.format(F))
else:
print()
TempMoney = input()
if TempMoney[:3] == ‘USD’:
print(‘RMB{:.2f}’.format(eval(TempMoney[3:])*6.78))
elif TempMoney[:3] == ‘RMB’:
print(‘USD{:.2f}’.format(eval(TempMoney[3:])/6.78))
else:
print()