爬虫笔记

爬虫的笔记

获取运行间隔时间

import time

scale = 50 

print("执行开始".center(scale//2,"-"))  # .center() 控制输出的样式,宽度为 25//2,即 22,汉字居中,两侧填充 -

start = time.perf_counter() # 调用一次 perf_counter(),从计算机系统里随机选一个时间点A,计算其距离当前时间点B1有多少秒。当第二次调用该函数时,默认从第一次调用的时间点A算起,距离当前时间点B2有多少秒。两个函数取差,即实现从时间点B1到B2的计时功能。
for i in range(scale+1):   
    a = '*' * i             # i 个长度的 * 符号
    b = '.' * (scale-i)  # scale-i) 个长度的 . 符号。符号 * 和 . 总长度为50 
    c = (i/scale)*100  # 显示当前进度,百分之多少
    dur = time.perf_counter() - start    # 计时,计算进度条走到某一百分比的用时
    print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='')  # \r用来在每次输出完成后,将光标移至行首,这样保证进度条始终在同一行输出,即在一行不断刷新的效果;{:^3.0f},输出格式为居中,占3位,小数点后0位,浮点型数,对应输出的数为c;{},对应输出的数为a;{},对应输出的数为b;{:.2f},输出有两位小数的浮点数,对应输出的数为dur;end='',用来保证不换行,不加这句默认换行。
    time.sleep(0.1)     # 在输出下一个百分之几的进度前,停止0.1秒
print("\n"+"执行结果".center(scale//2,'-'))

通用爬虫模板

import requests
def getHtmlTxt(url):
    try:
        r = requests.get(url, timeout = 30)
        r.raise_for_status() #如果返回status_code不是200,就抛出异常
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "产生异常"

if __name__ == '__main__': #如果当前运行程序是该程序,则执行,如果作为库导入,则不运行
    url = "https://www.baidu.com"
    print(getHtmlTxt(url))

下行遍历

soup.<tag>.children 返回iteration类型 仅儿子
soup.<tag>.contents 返回list类型 仅儿子
soup.<tag>.descendants 返回iteration类型 所有子孙节点

上行遍历

soup.<tag>.parent 仅父
soup.<tag>.parents 所有上级节点

平行遍历

soup.<tag>.next_sibling 仅下一个
soup.<tag>.next_siblings 所有后面的
soup.<tag>.previous_sibling 仅上一个
soup.<tag>.previous_siblings 所有前面的

格式化和编码

.prettify() 格式化,等于在每个标签后面加上换行符

列表生成器

for后面的if是过滤条件,不能带else

a = [x+1 for x in range(1,11) if x%2 == 0 ]

列表相加

a = []
for i in range(10):
    a += [i]
print(a) #输出[0,1,2,3,4,5,6,7,8,9]