"""requests库,自动爬取HTML页面,自动网络请求提交。
robots.txt协议,网络爬虫排除标准
Beautiful soup解析HTML页面
Project实战项目
Re正则表达式
Scrapy专业网络爬虫框架"""
import requests
r = requests.get("http://www.baidu.com")
print(r.status_code) # 状态码为200访问成功,404失败。
r.encoding = "utf-8" # 改编码utf-8。
print(r.text) # 打印网页内容。
#### request 的方法
"""request.get() 获取HTML网页的主要方法,对应于HTTP的GET。
requests.head() 获取HTML网页头文件方法,对应于HTTP的HEAD。
requests.post() 向HTTP网页提交POSE请求方法,对应于HTTP的POSE。
requests.put() 向HTTP网页提交PUT请求方法,对应于HTTP的PUT。
requests.patch() 向HTTP网页提交局部修改请求,对应于HTTP的PATCH。
requests.delete() 向HTTP提交删除请求,对应于HTTP的DELETE。
requests.request('method', url, **kwargs)
method = get, head, post, put """
#### requests.get()
"""requests.get(url, params=None, **kwargs)
url: 获取界面的url链接。
params: url中额外参数,可选。
**kwargs: 12个控制访问参数,可选。"""
"""Response对象属性
r.status_code: HTTP请求返回状态200成功,404失败。
r.text: HTTP响应内容的字符串形式。
r.encoding: HTTP header中猜测的响应内容编码方式。'ISO-8859-1'
r.apparent_encoding: 备选编码方式。'utf-8'
r.content: 响应内容二进制形式。"""
# requests库异常处理
"""requests.ConnectionError: 网络连接错误异常。
requests.HTTPError: HTTP错误异常。
requests.URLRequired: URL缺失异常。
requests.TooManyRedirects: 超过最大重定向次数异常。
requests.ConnectTimeout: 远程连接超时异常。
requests.Timeout: 请求url超时,超时异常。"""
"""通用代码框架"""
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 = "http://www.baidu.com"
print(getHTMLText(url))
####
"""Robots协议
Robots Exclusion Standard 网络爬虫排除标准。
作用:网站告诉爬虫,哪些页面可以抓取,哪些不可以。
形式:网站根目录下robots.txt文件。"""
import requests
data = requests.get("http://www.jd.com/robots.txt")
print(data.text)
>>>User-agent: * # 任何爬虫要遵循如下规律
Disallow: /?* # 不允许爬取?开头的字段
Disallow: /pop/*.html # 不许访问pop,*,html
Disallow: /pinpai/*.html?* # 不许访问pinpai,*,html?
User-agent: EtaoSpider #
Disallow: / #
User-agent: HuihuiSpider #
Disallow: / #
User-agent: GwdangSpider #
Disallow: / #
User-agent: WochachaSpider #
Disallow: / # 以上四个爬虫不许访问任何资源
#### 京东商品页面爬取
url = 'https://www.amazon.cn'
r = requests.get(url)
print(r.status_code)
r.encoding = r.apparent_encoding
print(r.encoding)
print(r.request.headers) # 显示headers中信息
kv = {'user-agent': 'Mozilla/5.0'} # 修改user-agent为Mozilla/5.0
r = requests.get(url, headers = kv)
print(r.request.headers)
print(r.text[:1000])
# 用百度搜索关键词提交
kw = {'wd': 'Python'} # 输入关键词
r = requests.get('http://www.baidu.com/s', params=kw) # 用get获得输入关键词后url
print(r.request.url) # 显示url
print(len(r.text)) # 显示url大小
#### 下载图片
import os
url = 'https://wx3.sinaimg.cn/mw690/a1c5e53ely1fpsxpmifapj20c80ga78g.jpg' # 图片地址
root = 'C:\\Users\\poseidon\\Desktop\\' # 地址根目录
path = root + url.split("/")[-1] # 根目录加上图片地址最后一段命名图片地址
# print(path) # 输出path地址,查看是否正确
# r = requests.get(url) # 获取图片
# with open(path, 'wb') as f: # w打开图片,b以二进制格式
# f.write(r.content) # 图片内容
# f.close() # 关闭文件
# 以try方式完成
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 f:
f.write(r.content)
f.close()
print("successful")
else:
print("already download") # 图片已经存在
except:
print("unable") # 获取失败
# IP地址归属地查询
url = 'http://www.ip138.com/ips138.asp?ip='
r = requests.get(url + '202.119.225.34')
print(r.status_code)
r.encoding = r.apparent_encoding
print(r.encoding)
print(r.text[-2000:])
网络爬虫requests库
最新推荐文章于 2024-06-14 14:46:48 发布