# 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:\jerry\spiderDay2\ttt.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"))