title: 爬虫入门一 基础知识 以及request

date: 2020-03-05 14:43:00

categories: python

tags: crawler

爬虫整体概述,基础知识。

requests库的学习

1.request

Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库

http://docs.python-requests.org/en/latest/

1.1

import requests
r=requests.get("http://www.whu.edu.cn/ ") #返回reponse对象
print(r.status_code)
返回值为200时,表明运行正常 输入:r.text 得到网页内容

HTTP状态码

200 成功/正常
404
503

1.2 http header

https://www.jianshu.com/p/6f29fcf1a6b3

HTTP(HyperTextTransferProtocol)即超文本传输协议,目前网页传输的的通用协议。HTTP协议采用了请求/响应模型,浏览器或其他客户端发出请求,服务器给与响应。就整个网络资源传输而言,包括message-header和message-body两部分。

根据维基百科对http header内容的组织形式,大体分为Request和Response两部分。

Header中有charset (字符集,也就是编码方式)

r.encoding是从HTTP header中猜测的响应内容编码方式,如果header中不存在charset,则认为编码为‘ISO-8859-1’(无法解析中文字符)

r.apparent_encoding是requests根据网页内容分析出来的

输入“r.encoding ” 查看该网页编码方式为'ISO-8859-1‘
输入“r.apparent_encoding”查看网页编码为'utf-8‘
输入“r.encoding=r.apparent_encoding”
再输入“r.text”,可以发现网页内容变为可以看懂的字符

1.3 异常

遇到网络问题(如:DNS查询失败、拒绝连接等)时,Requests会抛出一个ConnectionError 异常。

遇到罕见的无效HTTP响应时,Requests则会抛出一个 HTTPError 异常。

若请求超时,则抛出一个 Timeout 异常。

若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。

所有Requests抛出的异常都继承自 requests.exceptions.RequestException 。

1.4 通用框架

注意
Try
Exception
R.raise_for_status() def getHTMLText(url):
try:
r=requests.get(url,timeout=30)
r.raise_for_status() # 如果状态不是200,引发error异常
# print("%d\n %s" % (r.status_code, r.text))
print("%s %s" % (r.encoding, r.apparent_encoding))
r.encoding=r.apparent_encoding
print("%s %s" % (r.encoding, r.apparent_encoding))
#html = r.content # bytes 类型
#html_doc = str(html, 'utf-8') # html_doc=html.decode("utf-8","ignore")
#print(html_doc)
return r.text
except:
return "产生异常"

1.5 requests的方法 //http的操作

注意method的function的区别



def getHTMLText(url):
try:
r=requests.get(url,timeout=30) #reponse 参数 timeout
r.raise_for_status() # 如果状态不是200,引发error异常
# print("%d\n %s" % (r.status_code, r.text))
print("%s %s" % (r.encoding, r.apparent_encoding))
r.encoding=r.apparent_encoding
print("%s %s" % (r.encoding, r.apparent_encoding))
#html = r.content # bytes 类型
#html_doc = str(html, 'utf-8') # html_doc=html.decode("utf-8","ignore")
#print(html_doc)
print(r.text)
return r.text
except:
return "产生异常" def head(url):
r=requests.head(url)
print(r.headers) # 注意head headers
print(r.text) #空 def post(url): #追加
r=requests.get("http://httpbin.org/post")
print(r.text)
payload = {'name': 'your_name', 'ID': 'your_student number'}
r = requests.post("http://httpbin.org/post", data=payload) #参数 data
print(r.text) def put(url): #覆盖
r = requests.get("http://httpbin.org/put")
print(r.text)
payload = {'name': 'your_name', 'ID': '123456'}
r = requests.put("http://httpbin.org/put", data=payload)
print(r.text)

1.6 Request 访问控制字段 Requests.request(method,url,**kwargs)

标准格式 Requests.request(method,url,**kwargs)

**kwargs:控制访问的参数,均为可选项,共计13个
params: 字典或字节序列,作为参数增加到url中
data: 字典、字节序列或文件对象,作为Request的内容
JSON: JSON格式的数据,作为Request的内容
headers: 字典,HTTP定制头。可模拟任何浏览器向服务器发起请求
hd={'user-agent':'Chrome/56.0'}
r=requests.request('post','https://www.amazon.com/',headers=hd)
Cookies:字典或CookieJar , Request 中 的 cookie
auth : 元组 ,支持HTTP认证功能
files : 字典类型,传输文件
timeout : 设定超时时间,单位为秒
proxles : 字典类型 ,设定访问代理服务器,可以增加登录认证
Allowredirects: True/Fa1se,默认为True,重定向开关
stream : True/Fa1se,默认为True,获取内容立即下载开关
verify : True/Fa1se,默认为True,认证SSL证书开关
Cert :本地SSL证书路径

1.7 爬虫尺寸

网页:requests

网站:scrapy

全网:搜索引擎

1.8 robots协议

Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。

https://www.jd.com/robots.txt

User-agent: *
Disallow: /?*
Disallow: /pop/*.html
Disallow: /pinpai/*.html?*
User-agent: EtaoSpider
Disallow: /
User-agent: HuihuiSpider
Disallow: /
User-agent: GwdangSpider
Disallow: /
User-agent: WochachaSpider
Disallow: / *代表所有,/代表根目录
User-agent: *
Disallow: /
下面四种爬虫被京东认为恶意爬虫,拒接其访问

1.9 chrome 查看useragent

F12 network name

2.requests的例子

import requests
import os def amazon():
#url="https://www.amazon.cn"
# r=requests.get(url)
# print(r.status_code)
#url="https://www.amazon.com"
#理论上python直接爬,可以看到requests请求很诚实的告诉了网站访问使用Python发起的,
# 该网站通过头信息判断该访问是爬虫发起的而不是由浏览器发起的。amazon会503,使用useragent模拟浏览器后没问题
#问题是直接10060.
#url = "https://www.amazon.co.jp"
# try:
# r=requests.get(url)
# #r = requests.get(url,timeout=5)
# print(r.request.headers) #头信息
# #print(r.request.url)
# #r.raise_for_status()
# print(r.status_code)
# except:
# print("except %s"% r.status_code)
# print(r.request.headers) # 注意是request 网站通过头信息判断是python发起,爬虫,拒绝
#hd = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'}
#r = requests.request('post', url=url, headers=hd)
#r = requests.get(url, headers=hd)
#print("final %s"% r.status_code) #上面是网络问题导致的amazon访问不了,我还以为是代码问题改了很久...下面这样做就行 了
url = "https://www.amazon.com"
r=requests.get(url)
print("%s %s"%(r.status_code,r.request.headers)) #注意是request.headers不是requests
#503 {'User-Agent': 'python-requests/2.21.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
hd = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'}
#r = requests.request('post', url=url, headers=hd) #请求方式是post,返回状态码405,后台不允许post
r = requests.get(url, headers=hd)
print("%s %s" % (r.status_code, r.request.headers)) #200 def searchengine():
keyword = "知乎"
try:
kv = {'wd': keyword}
r = requests.get("http://www.baidu.com/s", params=kv)
print(r.request.url)
r.raise_for_status()
print(r.text[1:1000])
# 结果太长,打印前1000个字符
except:
print("爬取失败")
# 百度直接搜索 武汉大学,华科
# https: // www.baidu.com / s?wd = 武汉大学 & rsv_spt = 1……
# https: // www.baidu.com / s?wd = 华中科技大学 & rsv_spt = 1……
# 所以只需要替换wd即可搜索
# def images():
#可以通过循环语句,批量爬取大量图片 正则式也可
url = "https://meowdancing.com/images/timg.jpg"
root = "F://Pictures//"
path = root + url.split('/')[-1] #split 通过 / 分片,取最后一片也就是timg.jpg
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("文件保存成功")
else: # 写代码时注意缩进
print("文件已存在")
except:
print("爬取失败") def ipaddress():
url = "http://www.ip138.com/ips138.asp?ip="
ip="101.24.190.228"
url=url+ip
# +"&action=2" 不加也可以
hd = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'}
print(url)
try:
r = requests.get(url,headers=hd) #不加hd好像不行
print(r.status_code)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[-2000:]) # 输出最后2000个字符
except:
print("爬取失败") # 打开
# http: // www.ip138.com / 可以通过输入IP地址查询地理位置,输入IP地址后,查看浏览器链接
# http: // www.ip138.com / ips138.asp?ip = 202.114
# .66
# .96 & action = 2
# 可以看出,查询链接为
# http: // www.ip138.com / ips138.asp?ip =“你的IP地址”
#
# 通过这个例子我们可以看出,很多人机交互的操作,实际上是通过提交的HTTP链接来完成的,
# 因此当我门通过简单的分析,得知HTTP链接与交互信息的对应关系后,就可以通过Python,爬取我们所需的资源 if __name__ == "__main__":
#amazon()
#searchengine()
#images()
ipaddress()

爬虫入门一 基础知识 以及request的更多相关文章

  1. 2.Docker容器学习之新生入门必备基础知识

    0x02 Docker 核心概念 描述:Docker的三大核心概念镜像/容器和仓库, 通过三大对象核心概念所构建的高效工作流程; 1.镜像 [image] 描述:images 类似于虚拟机镜像,借鉴了 ...

  2. 1.Docker容器学习之新生入门必备基础知识

    0x00 Docker 快速入门 1.基础介绍 描述:Docker [ˈdɑ:kə(r)] 是一个基于Go语言开发实现的遵循Apache 2.0协议开源项目,目标是实现轻量级的操作系统虚拟化解决方案: ...

  3. Nginx入门篇-基础知识与linux下安装操作

    我们要深刻理解学习NG的原理与安装方法,要切合实际结合业务需求,应用场景进行灵活使用. 一.Nginx知识简述Nginx是一个高性能的HTTP服务器和反向代理服务器,也是一个 IMAP/POP3/SM ...

  4. 01慕课网《vue.js2.5入门》——基础知识

    前端框架 Vue.js2.5 2018-05-12 Vue官网:https://cn.vuejs.org/ 基础语法+案例实践+TodoList+Vue-cli构建工具+TodoList Vue基础语 ...

  5. Python爬虫入门(基础实战)—— 模拟登录知乎

    模拟登录知乎 这几天在研究模拟登录, 以知乎 - 与世界分享你的知识.经验和见解为例.实现过程遇到不少疑问,借鉴了知乎xchaoinfo的代码,万分感激! 知乎登录分为邮箱登录和手机登录两种方式,通过 ...

  6. React 基础入门,基础知识介绍

    React不管在demo渲染还是UI上,都是十分方便,本人菜鸟试试学习一下,结合阮一峰老师的文章,写下一点关于自己的学习react的学习笔记,有地方不对的地方,希望各位大牛评论指出: PS:代码包下载 ...

  7. hadoop入门必备基础知识

    1.对Linux 系统的要求        会基本的命令:        (1)知道root用户        (2)ls命令会查看文件夹内容        (3)cd命令等2.Java 的要求    ...

  8. SQLAlchemy 快速入门、基础知识

    SQLAlchemy 是Python 编程语言下的一款开源软件.提供了SQL工具包及对象关系映射(ORM)工具. ORM, 全称Object Relational Mapping, 中文叫做对象关系映 ...

  9. Android宝典入门篇-基础知识

    今天跟大家分享的是我学android时的笔记.以前搞net很多年了,现在还在搞这.本着活到老学到老抽了点时间学习了下android.android网上有很多的视频教程,当时对于我这样以前不了解java ...

随机推荐

  1. Spring集成GuavaCache实现本地缓存

    Spring集成GuavaCache实现本地缓存: 一.SimpleCacheManager集成GuavaCache 1 package com.bwdz.sp.comm.util.test; 2 3 ...

  2. 网络可视化工具netron详细安装流程

    1.netron 简介 在实际的项目中,经过会遇到各种网络模型,需要我们快速去了解网络结构.如果单纯的去看模型文件,脑海中很难直观的浮现网络的架构. 这时,就可以使用netron可视化工具,可以清晰的 ...

  3. 人工智能"眼睛"——摄像头

    摄像头机器视觉人工智能的"眼睛",其重要性在嵌入式领域不言而喻.但是如何理解和使用摄像头却是一个非常棘手的问题.本文主要针对调试摄像头过程中遇到的问题,对摄像头的基本原理及概述进行 ...

  4. 单台服务器-利用docker搭建Redis哨兵集群模式

    前言:只有一台华为云服务器,所以打算创建三个容器来模拟三个服务器了. 一:拉取redis镜像 二:拉取redis.conf文件 放在自定义的目录下:wget -c http://download.re ...

  5. CentOS7,非LVM根分区扩容步骤:

    1.查看现有的分区大小 非LVM分区,目前磁盘大小为40G,根分区总容量为40G,(是自定义分区安装的) 2.关机增加磁盘大小至100G 如果你们是vmwaer虚拟软件安装的那如下入扩容: 3.查看磁 ...

  6. RAID系统被初始化

    RAID系统被初始化 https://forum.huawei.com/enterprise/zh/thread-256077-1-1.html

  7. 支付回调地址 同步回调地址 异步回调地址 return_url和notify_url的区别

    [微信支付]JSAPI支付开发者文档 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_16&index=10 退款结果通知 ...

  8. scrapy爬虫 简单入门

    1. 使用cmd+R命令进入命令行窗口,并进入你需要创建项目的目录 cd 项目地址 2. 创建项目 scrapy startproject <项目名> cd <项目名> 例如 ...

  9. JVM 线上故障排查

    JVM 线上故障排查 Linux 1.1 CPU 1.2 内存 1.3 存储 1.4 网络 一.CPU 飚高 寻找原因 二.内存问题排查 三.一般排查问题的方法 四.应用场景举例 4.1 怎么查看某个 ...

  10. SparkStreaming直连方式读取kafka数据,使用MySQL保存偏移量

    SparkStreaming直连方式读取kafka数据,使用MySQL保存偏移量 1. ScalikeJDBC 2.配置文件 3.导入依赖的jar包 4.源码测试 通过MySQL保存kafka的偏移量 ...