网络爬虫(五)

上一节说完了GET的方式了,这一节说一下POSt

import requests
data = {'name': 'zhou',
        'age': '22',
}
r1 = requests.post('http://httpbin.org/post', data=data)
print(r1.text)

依旧简单是不是,但是注意:GET方式传递参数的时候是params,而POST方式是data

结果如下:

{"args":{},"data":"","files":{},"form":{"age":"22","name":"zhou"},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"close","Content-Length":"16","Content-Type":"application/x-www-form-urlencoded","Host":"httpbin.org","User-Agent":"python-requests/2.18.4"},"json":null,"origin":"218.82.9.110","url":"http://httpbin.org/post"}

其中的form就是咱们提交的数据:

响应:

发送请求之后得到的自然就是响应。我们上几节用了text和content方法,当然还有其他的方法,比如说状态码,响应头,Cookies等

# -*- coding:UTF-8 -*-
__autor__ = 'zhouli'
__date__ = '2018/7/4 23:07'
import requests
import re
r = requests.get("http://jianshu.com")
print(type(r.status_code), r.status_code)  # 打印状态码
print(type(r.headers), r.headers)  # 响应头
print(type(r.cookies), r.cookies)  # cookies
print(type(r.url), r.url)  # 打印URL
print(type(r.history), r.history)  # 输出history属性得到的请求历史

得到的结果如下:

<class 'int'> 403
<class 'requests.structures.CaseInsensitiveDict'> {'Date': 'Wed, 04 Jul 2018 15:47:58 GMT', 'Server': 'Tengine', 'Content-Type': 'text/html', 'Transfer-Encoding': 'chunked', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains; preload', 'Content-Encoding': 'gzip', 'X-Via': '1.1 PSfjfzdx2mj93:9 (Cdn Cache Server V2.0), 1.1 houdianxinxiazai63:10 (Cdn Cache Server V2.0)', 'Connection': 'keep-alive', 'X-Dscp-Value': '0'}
<class 'requests.cookies.RequestsCookieJar'> <RequestsCookieJar[]>
<class 'str'> https://www.jianshu.com/
<class 'list'> [<Response [301]>, <Response [301]>]

以上就是requests的基本用法。

接下来是高级用法:待续————————————————————————————————————————————————————————————————————

1,文件上传,requests可以模拟提交一些数据,假设网站有需要上传的文件,我们就可以用他来实现示例如下:

import requests
files = {'file': open('favicon.ico', 'rb')}
r = requests.post('http://httpbin.org/post',files=files)
print(r.text)
{"args":{},"data":"","files":{"file":"data:application/octet-stream;base64,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AAAAAAAAKysrBhYWGUcWFhiVFRUYvxUVGNkWFhfzFhYX8xUVGNkVFRi/FhYYlRYWGUcrKysGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="},"form":{},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"close","Content-Length":"6665","Content-Type":"multipart/form-data; boundary=b5a1fac14a4a41fa846060a6e3eca97b","Host":"httpbin.org","User-Agent":"python-requests/2.18.4"},"json":null,"origin":"218.82.14.186","url":"http://httpbin.org/post"}

返回的内容中包含了files这个字段,,但是form字段是空的,证实了,上传文件会有一个files字段来标识。,

2,Cookies,requests库获取和设置Cookies就变得很简单,只需要一步

import requests
r = requests.get('http://www.baidu.com')
print(r.cookies)
for k, v in r.cookies.items():
    print(k+'='+v)

得到的内容如下:

<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
BDORZ=27315

现在获取cookies是成功了,可以发现他是RequestCookieJar的类型,在调用iteams()方法,实现遍历解析

当然cookies也可以用来维持登录的状态,登录任何网站获取到他的cookies然后将得到的cookies放在headers之中即可。

 然后

r=request.get('http://www.tianxiaz.com',headers=headers)
print(r.text)

回话维持:

在request中,如果直接利用get或者是post等方法确实可以做到模拟网页请求,但是这实际上相当于不同会话,也就是相当于不同浏览器打开不同页面。

也就是说咱们下次爬虫不能够每次都重新获取一次cookies啊或者坦白的讲,每一次都设置一次cookies。

那如何维持同一个会话呢?

这样做的话就相当于浏览器重新打开了一个页面而不是重新开了个浏览器。

这就利用到session了,利用session就不用每一次都设置cookies,他会自动处理好。

# -*- coding:UTF-8 -*-
__autor__ = 'zhouli'
__date__ = '2018/8/7 23:37'
import requests
requests.get('http://httpbin.org/cookies/set/number/123456789')
r = requests.get('http://httpbin.org/cookies')
print(r.text)

在上面的代码中,请求了一个网址http://httpbin.org/cookies/set/number/123456789。请求这个网址的时候,可以设置一个cookie,名称叫做number,内容是123456789,随后请求了http://httpbin.org/cookies,此网址可以获取当前的Cookies

运行结果如下:

{
  "cookies": {}
}

结果并不能获取到,但是如果换成session呢?

import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789')
r = s.get('http://httpbin.org/cookies')
print(r.text)

结果如下:

{
  "cookies": {
    "number": "123456789"
  }
}

所以,利用session可以模拟同一个会话不用担心cookies,通常用于模拟登陆成功之后在做下一步动作。session在平常用的非常广泛,可以模拟在一个浏览器中打开同一个站点的不同页面。

SSL证书验证:

一般默认request的参数verify参数控制是否检查此证书,如果不设置verify,则默认为true,如果证书没有被CA机构信任,那就需要添加verify参数,利用request来测试一下:

import requests
response = requests.get('http://www.12306.cn', verify=False)
print(response.status_code)

或者通过捕获警告到日志的方式忽略警告:

import requests
import logging
logging.captureWarnings(True)
response = requests.get('http://www.12306.cn', verify=False)
print(response.status_code)

代理设置

对于某些网站,在测试的时候请求几次,能正常获取内容。但是一旦大规模爬去,对于大规模且频繁的请求,网站可能会弹出验证码,或者直接跳转到登录的页面去了,甚至可能直接封掉IP,一段时间不能够访问。

那么为了防止这种情况发生,我们需要设置代理来解决这个问题,这个就需要用到proxies参数,,可以这样设置。

import requests
proxies = {
    "http": "http://10.10.1.10:3128",
    "https": "http://10.10.1.10:3128"
}
response = requests.get('http://www.taobao.com', proxies=proxies)

代理池自己买

超时设置:

有的时候响应太慢了,就需要设置超时,一旦响应超过这个时间就抛出错误,这个就是timeout参数,

import requests
response = requests.get('http://www.taobao.com', timeout=1)
print(response.status_code)

通过这样的方式,我们可以将超时时间设置为1s,如果1s内没有响应,那就抛出异常。

实际上请求分为两个阶段,连接(connect)和读取(read)阶段,timeout参数是这两个时间之和。

如果要分别设置就传入元祖timeout(5,11,30),永远不设置超时就不写timeout参数,或者让timeout=None即可。

身份认证:

在访问网站时候,有时会有登录页面:

此时就可以采用request自带的身份认证的功能:

import requests
from requests.auth import HTTPBasicAuth  # 登录
response = requests.get('http://localhost:5000', auth=HTTPBasicAuth('username', 'password'))  # 方式一
response = requests.get('http://localhost:5000', auth=('username', 'password'))  # 简写
print(response.status_code)

正则表达式

正则表达式无论是在什么地方用到的地方都很广泛。不仅仅限于爬虫。

这里提供一个在线正则表达式的测试网址:http://tool.oschina.net/regex/,输入待匹配的文本,然后选择常用的表达式即可。

 正则表达式的常见匹配规则如下:

模式描述
w 匹配字母数字及下划线
W 匹配非字母数字及下划线
s 匹配任意空白字符,等价于 [ f].
S 匹配任意非空字符
d 匹配任意数字,等价于 [0-9]
D 匹配任意非数字
A 匹配字符串开始
 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串
z 匹配字符串结束
G 匹配最后匹配完成的位置
匹配一个换行符
匹配一个制表符
^ 匹配字符串的开头
$ 匹配字符串的末尾
. 匹配任意字符,除了换行符
[...] 用来表示一组字符,单独列出:[amk] 匹配 'a','m' 或 'k'
[^...] 不在 [] 中的字符:[^abc]匹配除了 a,b,c 之外的字符。
* 匹配 0 个或多个的表达式。
+ 匹配 1 个或多个的表达式。
? 匹配 0 个或 1 个由前面的正则表达式定义的片段,非贪婪方式
{n} 精确匹配 n 个前面表达式。
{n, m} 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
a | b 匹配 a 或 b
( ) 匹配括号内的表达式,也表示一个组

 可能有点晕,下面详解,在python中re模块就是正则模块。

match()

match匹配,像他传入要匹配的字符串以及正则表达式,就可以检测这个正则表达式是否匹配字符串。

match()方法是从字符串的起始位置!开始的匹配,如果匹配成功,则返回结果,否则返回None。

import re
content = 'hello 123 4567 World_This is a Regex Demo'
print(len(content))
result = re.match('^hellosdddsd{4}sw{10}', content)
print(result)
print(result.group)
print(result.span())

运行结果如下:

41
<_sre.SRE_Match object; span=(0, 25), match='hello 123 4567 World_This'>
hello 123 4567 World_This
(0, 25)

其中^hellosdddsd{4}sw{10}是用它来进行匹配的,开头的^是匹配字符串的开头(看是否字符串是以此为开头),在这里也就是以hello开头;s表示匹配空白字符;用于匹配空格;d用于匹配数字,3个d就表示匹配3个数字当然也可以写为d{3},然后用w也就是匹配字母数字或者是下划线。

在match中第一个参数是正则表达式的参数,第二个是需要匹配的字符串;

可以看到,匹配的结果是一个set_Match对象,该对象有两个方法,一个就是group()方法,可以输出匹配的内容,但是,一旦匹配不成功就会报错!当然也可以使用group(1)等用索引的方法取出值。

第二个就是span()方法,可以输出匹配的范围,结果是(0,25),就是在源字符串中的位置。

贪婪匹配和非贪婪匹配,.*和.*?,但是在这里需要注意的是,在匹配的结尾千万不要加非贪婪匹配!,因为他会尽量少的进行匹配。

修饰符

import re
content = """hello 123 4567 World_This is a 
Regex Demo"""
print(len(content))
result = re.match('^he.*?(d+).*?Demo$', content)
print(result)
print(result.group())
print(result.span())

结果如下:

42
Traceback (most recent call last):
None
  File "C:/Users/lenovo/Desktop/新建文件夹/seiion.py", line 10, in <module>
    print(result.group())
AttributeError: 'NoneType' object has no attribute 'group'

为什么加一个换行符就匹配不到呢?因为.是匹配除了换行符之外的任意字符,当遇到换行符的时候.*就无法匹配了。

修改代码如下:

import re
content = """hello 123 4567 World_This is a 
Regex Demo"""
print(len(content))
result = re.match('^he.*?(d+).*?Demo$', content,re.S)
print(result)
print(result.group())
print(result.span())

在匹配后加上re.S,这个修饰符意味着.匹配包括换行符在内的任意字符,此时结果:

42
<_sre.SRE_Match object; span=(0, 42), match='hello 123 4567 World_This is a 
Regex Demo'>
hello 123 4567 World_This is a 
Regex Demo
(0, 42)

这个经常在网页中用到。

修饰符描述
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 w, W, , B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

比较常用的是re.S和re.I

遇到需要转义直接在前方加上一个反斜杠即可

 3,search()

前面提到过,match()方法是从字符串的开始位置进行匹配,但是如果开头就不匹配,那么整个就匹配失败了,所以就有了 下面的search()方法,他在匹配字符串的时候回扫描整个字符串,然后返回第一个成功匹配的结果,如果没有找到的话就返回None;

为了匹配方便尽量采用search方法,但是如果需要返回所有的内容就findall();

4,sub()

除了使用正则表达式提取信息之外,有时候还需要替换修改文本,在字符串中可以使用replace方法,但是那个需要确定固定字符,但是sub()方法就不一样了

import re
content = "hello 123 4567 World_This is a"
content = re.sub('d+', '', content)
print(content)

运行结果如下:

hello   World_This is a

5,compile()

前面所有方法都是用来处理字符串的方法,而现在的方法叫做预编译。

import re
content1 = "2016-11-11 12:00"
content2 = "2016-11-12 12:01"
content3 = "2016-11-13 12:02"
pattern = re.compile('d{2}:d{2}')
result1 = re.sub(pattern, '', content1)
result2 = re.sub(pattern, '', content2)
result3 = re.sub(pattern, '', content3)
print(result1, result2, result3)

处理结果如下:

2016-11-11  2016-11-12  2016-11-13 

当然在compile方法中还可以假如修饰符,作进一步的封装;

没有过不去的坎,只有没加够的油!
原文地址:https://www.cnblogs.com/zhoulixiansen/p/9266074.html