python爬虫学习-day1

加入Datawhale开始学习共计一周的python爬虫,争取高质高效完成任务。

学习get与post请求

通过requests实现

简单操作

使用Requests来实现请求的操作很简单,下面先分别贴出两个函数的参数含义(直接使用python的help函数即可):

image.png

image.png

两个函数的用法也很清晰明了了。具体使用代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import requests

# get请求
url = 'http://www.baidu.com'
response = requests.get(url)
print(response.text)

# post请求
# 发送post请求时添加一个data参数,可以用字典构造
data = {
"name":"desmon",
"school":'sysu'
}
response = requests.post("http://www.baidu.com",data=data)
print(response.text)

运行结果分别如下:

image.png

image.png

额外知识

另外,注意到post函数的参数还可以用json数据类型,下面简单使用一下json。参考博客:https://www.cnblogs.com/Rita-LJ/p/8759452.html

json模块提供了一种简单的方式来编码和解码JSON数据,其主要函数是json.dumps()和json.loads()。示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
# 将python数据结构转换成JSON
import json

data = {
'name':'desmon',
'school':'sysu'
}
json_str = json.dumps(data)

# 将JSON编码的字符串转换成python数据结构
data = json.loads(json_str)

通过urllib实现

使用urllib包进行操作也很简单。

1
2
3
4
5
6
7
8
9
10
11
12
13
import urllib.request

# get请求
f = urllib.request.urlopen('https://www.baidu.com')
firstline = f.readline() # 读取html页面的第一行
print(firstline)

# post请求
req = urllib.request.Request(url='https://www.baidu.com',
data=b'The first day of Web Crawler')
req_data = urllib.request.urlopen(req)
req = req_data.read()
print(req)

运行结果如下:
image.png

image.png

断开网络后发出申请

这里仅以requests库提供的post和get为例,运行结果如下:
image.png

image.png

可以看到均出现了ConnectionError,即连接错误。

请求头

请求头的作用,通俗来讲,就是能够告诉被请求的服务器需要传送什么样的格式的信息。由于时间关系,这里就贴一下从百度百科看来的一些我认为比较重要的请求头类型:

Accept:浏览器可接受的MIME类型。
Accept-Charset:浏览器可接受的字符集。
Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。
Connection:表示是否需要持久连接。
Content-Length:表示请求消息正文的长度。
Cookie:这是最重要的请求头信息之一。
User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。
… 等等等

如何添加请求头?

在爬虫的时候,如果不添加请求头,可能网站会阻止一个用户的登陆,此时我们就需要添加请求头来进行模拟伪装,使用python添加请求头方法如下。(参考博客:https://www.jianshu.com/p/89ab535989a9)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import requests

headers={"User-Agent" : "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6) ",
"Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language" : "en-us",
"Connection" : "keep-alive",
"Accept-Charset" : "GB2312,utf-8;q=0.7,*;q=0.7"}

r=requests.post("http://baike.baidu.com/item/哆啦A梦",headers=headers,allow_redirects=False) #allow_redirects设置为重定向

r.encoding='UTF-8'
print(r.url)
print(r.headers) #响应头
print(r.request.headers) #请求头

运行结果如下:

image.png

感想

时间很短,所以也没有深入了解的时间,这样其实也只是懂个皮毛。希望等自己忙过这一阵,可以真正的开始爬虫学习。