import requests
#
# #### request库的get()方法####
# resp = requests.get("https://www.baidu.com")
# print(resp.status_code) # 查看状态码200为成功,404为失败
# print(resp.text) # 打印HTML内容,出现乱码
# # 从HTTP的header 猜测的响应内容的编码方式
# print(resp.encoding) # 结果:ISO-8859-1
# # 从HTTP的内容中 分析出响应内容的编码方式
# print(resp.apparent_encoding)# 结果 :utf-8
# resp.encoding="utf-8" # 改变编码方式
# print(resp.text) # 格式正常
# # resp.encoding 如果header中不存在charset,则默认编码为 ISO-8859-1(不能识别中文)
# # resp.apparent_encoding 根据网页内容分析出的编码方式(备选)
#### 爬取网页的通用代码框架####
def getHTMLText(url):
try:
r = requests.get(url,timeout=30)
r.raise_for_status()# 如果状态码不是200,引发HTTPError异常
r.encoding=r.apparent_encoding
return r.text
except:
return "产生异常"
if __name__ =='__main__':
url="www.baidu.com"
print(getHTMLText(url))# 产生异常
# 网络图片的爬取和存储
import requests
import os
# 网络图片链接的格式:http://www.example.com/picture.jpg
url ="https://pic3.zhimg.com/80/v2-5b2d8d4f3109c2cb346f04cae6a5870e_1440w.jpg"
root ="D:/"
path =root+url.split("/")[-1]# 使用图片原来的名字
try:
if not os.path.exists(root):# 判断当前根目录是否存在
os.mkdir(root)
if not os.path.exists(path):# 判断文件是否存在
r=requests.get(url)
with open(path,'wb')as p:
p.write(r.content)
p.close()
print("文件保存成功")
else:
print("文件已存在")
except:
print("爬取失败")
import requests
# 亚马逊商品页面的爬取
# 通过headers字段,让代码模拟浏览器向亚马逊服务器提供http请求
# 网站对于网络爬虫的限制
# 第一种:通过robos协议,告知爬虫,那些东西可以访问,那些不能访问
# 第二种:通过判断对网站访问的HTTP头来查看本次访问是不是由于爬虫引起的,网站一般接收的是由浏览器引发的http请求,
url = ("https://www.amazon.cn/dp/B00T2NGQW2/ref=s9_acsd_ri_bw_c2_x_0_i?pf_rd_m=A1U5RCOVU0NYF2&pf_rd_s=merchandised-search-3&pf_rd_r=RJSE6X6MYAPAP9JEM0T3&pf_rd_t=101&pf_rd_p=4602c871-ec9e-4679-90ba-1ddbdb46b754&pf_rd_i=144154071")
r = requests.get(url)
print(r.status_code)# 503
print(r.encoding)
r.encoding = r.apparent_encoding
# print(r.text)
print(r.request.headers)
kv={'User-Agent':'Mozilla/5.0'}# 浏览器身份标识
url = ("https://www.amazon.cn/dp/B00T2NGQW2/ref=s9_acsd_ri_bw_c2_x_0_i?pf_rd_m=A1U5RCOVU0NYF2&pf_rd_s=merchandised-search-3&pf_rd_r=RJSE6X6MYAPAP9JEM0T3&pf_rd_t=101&pf_rd_p=4602c871-ec9e-4679-90ba-1ddbdb46b754&pf_rd_i=144154071")
r = requests.get(url,headers=kv)
print(r.request.headers)
print(r.status_code)
print(r.text[100:300])# 爬取字节范围