2019-02.24(review)

作者: 262153 | 来源:发表于2019-02-24 18:03 被阅读1次

    1.小说爬取(spider)

    参照链接:使用Beautiful Soup爬取小说(bs4 + urllib)

    a.BeautifulSoup

    soup = BeautifulSoup(html_doc, 'html.parser')

    # print(soup.prettify())

    # tag 的内容,名称等。。。可用于查找文本内容

    print(soup.title)//print(soup.title.name)//print(soup.title.string)//print(soup.title.parent.name)// print(soup.body.children.name) # children 选项

    print(soup.p)//print(soup.p.name)//print(soup.p.get_text())# 获取所有文字内容


    .text 与 .string 的区别于使用范围: 是否包含多个子节点,多个只能用text,返回类型有区别

    # tag中包含多个字符串 [2] ,可以使用 .strings 来循环获取

    # 输出的字符串中可能包含了很多空格或空行,使用 .stripped_strings 可以去除多余空白内容


    print(soup.a.attrs)# 获取所有的属性值  可使用属性值进行目标位置确认,或者 href,scr,img等获取

    # 属性值的获取方式 : ["attrs"] , .get("attrs ")

    print(soup.a['class'])  // print(soup.a.get('href'))


    # 查找,遍历

    # find_all( name , attrs , recursive , string , **kwargs )

    '''

    name 参数可以查找所有名字为 name 的tag,字符串对象会被自动忽略掉,

    keyword 参数:搜索指定名字的属性时可以使用的参数值包括 字符串 , 正则表达式 , 列表, True .

    string 参数可以搜搜文档中的字符串内容.

    limit 参数限制返回结果的数量 也可理解find 为 limit= 1

    只想搜索tag的直接子节点,可以使用参数 recursive=False,默认为True: 搜索所有子孙节点

    '''

    eg:

    print(soup.find(id="link3"))//print(soup.find_all('a'))

    # 关键字: class 改为 class_

    for linkin soup.find_all('a', class_="sister"):

        print(link['id'], ':', link.get('href'))


    Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:Tag , NavigableString , BeautifulSoup , Comment .

    (1)tag

    soup = BeautifulSoup('Extremely bold')

    tag = soup.b

    # tag 的属性值更改获取 , tag的属性操作方法与字典一样

    tag.name ='change'

    print(soup.change)

    tag["class"] ='blod_change'

    print(tag.get('class'))

    (2) NavigableString 类来包装tag中的字符串

    一个 NavigableString 字符串与Python中的Unicode字符串相同,

    并且还支持包含在 遍历文档树 和 搜索文档树 中的一些特性.

    通过 unicode() 方法可以直接将 NavigableString 对象转换成Unicode字符串

    # tag中包含的字符串不能编辑,但是可以被替换成其它的字符串,用 replace_with()

    (3)comment

    # Comment 对象是一个特殊类型的 NavigableString 对象

    (4)相关知识点

    .parent 属性来获取某个元素的父节点

    .parents 属性可以递归得到元素的所有父辈节点

    .next_sibling 和 .previous_sibling 属性来查询兄弟节点

    .next_siblings 和 .previous_siblings 属性可以对当前节点的兄弟节点迭代输出

    .next_element 属性指向解析过程中下一个被解析的对象(字符串或tag),结果可能与 .next_sibling 相同,但通常是不一样的.

    # Beautiful Soup支持大部分的CSS选择器: .select() 方法中传入字符串参数, 即可使用CSS选择器的语法找到tag

    b.小说内容实战

    小说章节内容爬取使用BeautifulSoup进行解析文本内容;

    针对小说章节列表进行分析,return(list) 小说章节名+链接;

    使用函数def实现以上功能,并进行代码整合。

    注意:

    文本解析时的空格与换行符;

    进度显示:

    #打印爬取进度

    sys.stdout.write("已下载:%.3f%%"% float(index/numbers) +'\r')

    sys.stdout.flush()                index +=1


    2.python运算符

    Python比较运算符:

    Python赋值运算符:+=,-=, ......etc简化操作

    Python位运算符

    python逻辑运算符:与或非,and,or,not

    身份运算符与成员运算符:in//not in;is//not is:

    运算符优先等级(从高到底):

    3.user_agent 和 IP

    参照资料链接: 使用User Agent和代理IP隐藏身份

    User Agent存放于Headers中,服务器就是通过查看Headers中的User Agent来判断是谁在访问。(模拟浏览器访问)对于在程序过程中访问网页,发送请求时(urlopen/requests.get)需要在请求总添加 “headers=header”或使用add_header()方法,添加headers(session/request.Request(url))。

    IP设置可大致分为以下三个步骤:

    s:

    需要注意:

    这里示例使用的代理IP为开放代理,若使用加密代理第一步需:{'http' : 'user:password @ ip:port}:

    可以使用random.choice(ip)//random.choice(user_agent) :此处ip和user_agent 为一组

    random.choice():查找内容可以为 列表,元组或字符串

    requests:requests.get(url = http_url, headers = headers, proxies = proxies, timeout =30)

    针对第三步:request.install_opener(opener) 目的是将前面的内容作为默认设置保存,后续使用response = request.urlopen(url)中就已经针对ip设置, 或者也可使用opener .urlopen(url) 进行局部使用

    4.不同级别的范数在机器学习中的应用

    参考链接:范数与距离的关系以及在机器学习中的应用

    L1范数和L2范数,用于机器学习的L1正则化、L2正则化。对于线性回归模型,使用L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归)。

    其作用是:

    L1正则化是指权值向量w中各个元素的绝对值之和,可以产生稀疏权值矩阵(稀疏矩阵指的是很多元素为0,只有少数元素是非零值的矩阵,即得到的线性回归模型的大部分系数都是0. ),即产生一个稀疏模型,可以用于特征选择;

    L2正则化是指权值向量w中各个元素的平方和然后再求平方根,可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合。


    常用的向量的范数:

    L1范数(曼哈顿距离):  ||x|| 为x向量各个元素绝对值之和。

    L2范数(欧式距离):  ||x||为x向量各个元素平方和的1/2次方,L2范数又称Euclidean范数或者Frobenius范数

    Lp范数(闵可夫斯基距离(Minkowski Distance)):  ||x||为x向量各个元素绝对值p次方和的1/p次方

    L∞范数(切比雪夫距离):  ||x||为x向量各个元素绝对值最大那个元素的绝对值,如下:


    Mahalanobis距离:也称作马氏距离。在近邻分类法中,常采用欧式距离和马氏距离。

    m

    其中p是一个变参数。

    当p=1时,就是曼哈顿距离,

    当p=2时,就是欧氏距离,

    当p→∞时,就是切比雪夫距离,     

    根据变参数的不同,闵氏距离可以表示一类的距离。

    相关文章

      网友评论

        本文标题:2019-02.24(review)

        本文链接:https://www.haomeiwen.com/subject/rqdwbftx.html