zoukankan      html  css  js  c++  java
  • 爬虫,request,response 属性,方法,2.beautifulsoup解析模块

    # print(resp.text)
    # print(resp.content)
    # print(resp.status_code)
    # print(resp.url)
    # print(resp.cookies) # 获取返回的cookies信息
    # print(resp.cookies.get_dict()) # 获取返回的cookies信息
    # # print(type(resp.json()))# 将结果进行反序列化
    # print(resp.request) # 请求方式
    # 从文档中获取编码方式
    # print(resp.apparent_encoding)
    # print(resp.encoding)
    print(resp.headers) # 查看响应头
    print(resp.history) # 重定向历史 即前一次请求的地址
    print(resp.url) # 当前地址


    # resp = requests.get(url,
    # params={"wd":"egon"},
    # headers={"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3538.77 Safari/537.36"},
    # stream=True)
    # 以流的方式读取原始数据 没有经过HTTP协议解析的数据 一般不用
    # print(resp.raw.read(100))



    # 当文档的编码方式response解码方式不同时  需要手动指定
    # resp2 = requests.get("http://www.autohome.com/news")
    # # 以文档声明的方式来解码
    # resp2.encoding = resp2.apparent_encoding
    # print(resp2.text)









    # 对于返回值为json格式的处理

    # jsonresp = requests.get("http://v.juhe.cn/toutiao/index?key=1f1ed574dda497de207ccca4d9999d7f")
    #
    # print(type(jsonresp.text))
    # print(type(jsonresp.json()))
    #
    # print(jsonresp.json())



    # 给服务器传参数
    # requests.get("url",params={"key":'value'})

    # post请求 data和json都能传参数
    # requests.post("url",data={"name":"jerry","pwd":"123"},json={"name":"jerry","pwd":"123"})
    # data 拼接为:name=jerry&pwd=123
    # json 直接序列化成字符串 {"name":"jerry","pwd":"123"}


    # 超时时间 第一个表示连接超时时间 2表示响应超时时间
    # requests.post("https://www.baidu.com",timeout=(10,10))


    # allow_redirects 是否允许重定向


    # 代理池 ******** 对于爬虫而言是相当重要的一个参数
    # ps = ["121.228.240.101:9999","121.228.240.101:9999","121.228.240.101:9999","121.228.240.101:9999"]
    # import random
    # # 使用代理服务器请求
    # resp = requests.post("http://news.baidu.com/?tn=news",proxies={"HTTP":random.choice(ps)})
    # with open("ttt.html","wb") as f:
    # f.write(resp.content)
    # print(resp.text)



    # verify 证书验证 目前已经基本不用了 都换成了HTTPS 请求
    # import requests
    # respone=requests.get('https://www.12306.cn',
    # cert=('/path/server.crt',
    # '/path/key'),verify=True)
    # print(respone.status_code)




    # 上传文件
    f = open(r"D:jerryspiderDay2 tt.html","rb")
    # 接收一个字典 key是服务器用于提取文件的字段名 f时要上传的文件对象
    resp = requests.post("http://httpbin.org/post",files={"img":f})
    print(resp.status_code)


    
    
    # 使用点语法来查找标签   要注意 查找范围是全文 只能找到哦啊第一个名字匹配的标签
    # tag = soup.a
    # print(tag.attrs.get("href"))



    # 嵌套选择
    # print(soup.p.b.text)






    # 获取子节点
    # print(list(soup.p.children))
    # for i in soup.head.children: # 返回一个迭代器
    # print(i)
    #
    # # # print(soup.p.contents)
    # for i in soup.head.contents: # 返回一个列表
    # print(i)


    # 获取父标签
    # print(soup.p.parent)

    # 获取所有的父辈标签
    # print(list(soup.p.parents))
    # for i in soup.p.parents:
    # print(i.name)


    print(soup.p.contents)

    print(list(soup.p.descendants))

    # 获取所有子孙标签 不同之处在于 会把所有子孙标签全部拆出来 包括文本内容

    for i in soup.p.descendants:
    print(i.name) # 文本内容没有name属性



    # 获取兄弟标签 文本也被当做是一个节点
    # 下一个兄弟
    # print(soup.a.next_sibling.next_sibling)
    # 之后的兄弟们
    # print(list(soup.a.next_siblings))

    # 上一个兄弟
    # print(soup.a.previous_sibling)
    # 之前的兄弟们
    # print(list(soup.a.previous_siblings))


     过滤器
    # find_all查找所有匹配的标签
    # 按照名字匹配 可以传一个名字 或 一个列表
    # print(soup.find_all("a"))
    # print(soup.find_all(["a","p"]))

    # 找id 为link1 的a标签
    # print(soup.find_all("a",attrs={"id":"link1"}))
    # print(soup.find_all("a",attrs={"class":"sister"}))
    # print(soup.find_all(name="a",id="link1"))
    # 注意如果要按照条件为class来查找 需要使用class_ 因为class是关键字
    # 多个类名加空隔即可
    # print(soup.find_all(name="a",class_="sister brother")) # 只能找到类名完全匹配的如:<a class="sister brother">
    # print(soup.find_all(name="a",class_="sister")) #只要类名带有sister就能找到
    # 如果属性带有特殊符号 可以把条件装在attrs中
    # print(soup.find_all(name="a",attrs={"data-a":"sister"}))


    # 指定文本
    # print(soup.find_all(name="a",text="Elsie"))


    # 过滤器
    # 标签名称中带有b字母的标签
    # print(soup.find_all(name="b"))
    #
    # c = re.compile("b")
    # # 正则匹配
    # print(soup.find_all(name=c))


    # 数组
    # print(soup.find_all(name=["body","a"]))


    # True 表示所有标签
    # print(soup.find_all(True))
    # 所有具备id属性的标签
    # print(soup.find_all(id=True))


    # 方法匹配(写个函数来过滤)
    def myFilter(tag):# 必须只能有一个参数 参数表示要过滤的标签
    return tag.name == "a" and tag.text != "Elsie" and tag.has_attr("id")


    # print(soup.find_all(myFilter,limit=1))

    # print(soup.find_all(name="a"))


    # 过滤 可以是数组 可以是一个 re 可以是一个函数 可以是True



    # 使用方式和find_all 相同
    # print(soup.find("a"))










  • 相关阅读:
    Lua笔记4 语句
    Corps humain
    La Famille
    短语
    Lua笔记6 编译、执行与错误
    poser une question
    Photon——Exception Handling 异常处理
    Photon——Calling Operations 调用操作
    Photon——Licenses 许可证
    Photon——Firewall Settings 防火墙设置
  • 原文地址:https://www.cnblogs.com/wrqysrt/p/10693126.html
Copyright © 2011-2022 走看看