• 爬虫学习笔记2requests库和beautifulsoup4库学习笔记


    1.requests库

    1.1 安装

    win下

    pip install requests
    

    1.2 常用方法

    #各种请求方式:常用的就是requests.get()和requests.post()
    >>> import requests
    >>> r = requests.get('https://api.github.com/events')
    >>> r = requests.post('http://httpbin.org/post', data = {'key':'value'})
    >>> r = requests.put('http://httpbin.org/put', data = {'key':'value'})
    >>> r = requests.delete('http://httpbin.org/delete')
    >>> r = requests.head('http://httpbin.org/get')
    >>> r = requests.options('http://httpbin.org/get')
    

    1.2.1 .get((url, params=None, **kwargs),常用方法

    1.2.2 .post()

    需要有个参数,字典

    有关get请求和post请求的区别

    1.2.3 .content()

    获取二进制的数据,因为像音频,图片,视频等是二进制保存的

    1.2.4 .json()

    对于一些事json存储格式的,可以直接调用这个方法

    1.2.5 .session()

    利用session模型登陆进行先后访问

    后面补充

    2.beautifulsoup4

    解析html的强大工具
    beautifulsoup默认支持python的标准html解析库,但是它也支持第三方库lxml xml等
    我是anaconda3 里面自带这个库

    2.1 常用方法

    就是看一些标签把,一般提取之前,先F12,查看下 原网页的你需要的东西都在那个标签或者那个子标签里面
    .prettify() 缩进格式
    .title 获取title的所有名称
    .title.string 获取title所有的内容
    .head 获取head标签中的内容
    .div 获取div标签中的内容
    .a 获取a标签中的内容
    .find_all("a") 获取a标签中的所有内容
    .find(id="ul") 获取id="ul"

    #获取所有的a标签,并遍历打印a标签中的href的值
    for item in bs.find_all("a"):
        print(item.get("href"))
    
    #获取所有的a标签,并遍历打印a标签的文本值
    for item in bs.find_all("a"):
      print(item.get_text())
    

    2.2 bs4 中四大对象种类

    • Tag html中的一个个标签
    • NavigableString 获取标签内部的文字用.string就行
    • BeautifulSoup 一个文档的内容
    • Comment 一个特殊类型的NavigableString对象,其输出的内容不包括注释符号

    对于Tag,有两个重要的属性,name和attrs
    一般对于标签来说,其name就是标签名字
    attr是可以提取标签的属性的,得到的类型是一个字典
    可以修改删除属性

    2.3 遍历文档树

    • .contents 获取Tag的所有子节点,返回一个list,因此可以按照list的方式提取值
    • .children 获取Tag的所有子节点,返回一个生成器
      初步认为这俩的不同是返回对象的类型不太一样
      children用的多一点嘛?

    **一般获取所有的xx节点就是上一个for循环就好了

    for child in bs.body.children:
        print(children)
    

    2.4 搜索文档树

    2.4.1 find_all

    find_all(name,attrs,recursive,text,%%kwargs)
    

    name参数

    • 字符串过滤,会查找与字符串完全匹配的内容,也就是精确查找
    • 正则表达式:若是正则表达式那就通过search()来匹配内容
    • 列表:与列表中的任一元素匹配的节点返回
    t_list=bs.find_all(["meta","link"])
    for item in t_list:
        print(item)
    
    • 方法:传入方法就根据方法来匹配
    def name_is_exists(tag):
        return tag.has_attr("name")
    
    t_list=bs.find_all(name_is_exists)
    for item in t_list:
        print(item)
    

    kwargs

    #查询id=head的Tag
    t_list=bs.find_all(id="head")
    print(t_list)
    
    #查询所有包含class的Tag(因为class在python中属于关键字,所以加上_进行区别)
    ```python
    t_list=bs.find_all(class_=True)
    for item in t_list:
        print(item)
    

    attr参数
    不是所有的属性都可以用上面的方式进行搜索,比如html中的data-*属性,可以使用attr参数,定义一个字典素偶所包含特殊属性的tag:

    t_list=bs.find_all(attrs={"data-foo":"values"})
    for item in t_list:
        print(item)
    

    text参数
    可以通过线束搜索文档中的字符串内容,与name的可选参数一样

    limit参数

    传入一个limit参数;哎限制返回的数量

    2.4.2 find

    返回符合条件的第一个Tag

    2.5 css选择器

    .select()

  • 相关阅读:
    Tomcat 跨域问题的解决
    [SheetJS] js-xlsx模块学习指南
    漂亮又好用的Redis可视化客户端汇总
    Visual Studio 2015 出现 NuGet 安装程序包错误解决方法
    vs2015使用nuget包管理器安装失败
    C# 尝试还原程序包是出错:找不到“XXXXX”版本的程序包“XXXXXX”
    基于flink和drools的实时日志处理
    Docker常用命令
    Laravel5打印所有运行SQL
    Laravel5版本在sql查询时用when方便条件判断查询【闭包方式】
  • 原文地址:https://www.cnblogs.com/gaowenxingxing/p/12241847.html
Copyright © 2020-2023  润新知