zoukankan      html  css  js  c++  java
  • python3 爬虫笔记(一)beautiful_soup

    很多人学习python,爬虫入门,在python爬虫中,有很多库供开发使用。

    用于请求的urllib(python3)和request基本库,xpath,beautiful soup,pyquery这样的解析库。其中xpath中用到大量的正则表示式,对于新手来说,写正则很容易出错,在这里,从beautiful soup开始说。

    from beautiful_soup.constant import HTML_TEXT

    from bs4 import BeautifulSoup
    soup = BeautifulSoup(HTML_TEXT, 'lxml')
    # 将html文件以标准的格式输出, 会自动补全缺失的HTML结构
    print(soup.prettify())
    # 获取title标签的内容
    print(soup.div.string)
    # 获取名称
    print(soup.div.name)
    # 获取属性 属性值多个,所以返回值为list列表
    print(soup.div.attrs)
    # 元素选择可以嵌套 ,这样的方式在多个的情况下,只取第一个,
    # 比如body中有多个div,这里取了第一个
    print(soup.body.div.a.attrs)

    # contents 属性获取直接的子节点 children属性也是如此

    用属性选择较快,但是遇到复杂的情况,就很不灵活,这时候我们需要调用beautiful_soup中的一些方法# find_all 查询所有符合条件的元素
    # find_all(name, attrs, recursive, text, **kwargs)
    # name是属性名 attrs是属性
    print(soup.find_all(name="ul"))

    for ul in soup.find_all(name="ul"):
    print(ul.find_all(name="li"))
    # 属性传入夫人参数为字典格式
    print(soup.find_all(attrs={"class": "js-geo-city"}))

    # text
    print(soup.find_all(text=re.compile("热")))

    # find() 用法和find_all()一致,只不过返回的是单个元素,匹配到的第一个

    # 其他方法
    find_parents() # 返回所有的祖先节点
    find_parent() # 直接返回父节点

    find_next_siblings() # 返回后面所有的兄弟节点
    find_next_sibling() # 返回后面第一个兄弟节点

    find_previous_siblings() # 返回前面所有的兄弟节点
    find_pervious_sibling() # 返回前面第一个兄弟节点

    # css选择器 select()
    print(soup.select("ul li"))


  • 相关阅读:
    HYSBZ 3813 奇数国
    HYSBZ 4419 发微博
    HYSBZ 1079 着色方案
    HYSBZ 3506 排序机械臂
    HYSBZ 3224 Tyvj 1728 普通平衡树
    Unity 3D,地形属性
    nginx 的naginx 种包含include关键字
    Redis 出现NOAUTH Authentication required解决方案
    mysql 8.0出现 Public Key Retrieval is not allowed
    修改jar包里的源码时候需要注意的问题
  • 原文地址:https://www.cnblogs.com/qiutian-guniang/p/9694005.html
Copyright © 2011-2022 走看看