urllib用法
from urllib import request
from urllib import parse
import json
url = 'http://top.hengyan.com/dianji/default.aspx?p=1'
# 构建请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3722.400 QQBrowser/10.5.3738.400'
}
"""
url :目标url
data=None :默认为None表示是get请求,如果不为None说明是get请求
timeout:设置请求的过期时间
cafile=None, capath=None, cadefault=False:证书相关参数
context=None :忽略证书认证
"""
# url不能添加请求头
response = request.urlopen(url=url, timeout=10)
# 添加请求头
req = request.Request(url=url, headers=headers)
response = request.urlopen(req, timeout=10)
code = response.status
url = response.url
b_content = response.read()
html = b_content.decode('utf-8')
# 本地保存
with open('hengyan.html', 'w') as file:
file.write(html)
#####################post请求#############################
# 世纪佳缘网
def get_ssjy_data(page=1):
url = 'http://search.jiayuan.com/v2/search_v2.php'
# 构建请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3722.400 QQBrowser/10.5.3738.400'
}
form_data = {
'sex': 'f',
'key': '',
'stc': '1:11,2:20.28,23:1',
'sn': 'default',
'sv': '1',
'p': str(page),
'f': 'search',
'listStyle': 'bigPhoto',
'pri_uid': '0',
'jsversion': 'v5',
}
form_data = parse.urlencode(form_data).encode('utf-8')
# 构建请求对象
req = request.Request(url=url, data=form_data, headers=headers)
response = request.urlopen(req, timeout=10)
if response.status == 200:
content = response.read().decode('utf-8').replace('##jiayser##//', '').replace('##jiayser##', '')
data = json.loads(content)
userinfos = data['userInfo']
for user in userinfos:
age = user['age']
name = user['nickname']
gender = user['sex']
# 获取下一页
total_page = int(data['pageTotal'])
print(str(page) + '页爬取完毕')
if page < total_page:
# 需要继续提取下一页
next_page = page + 1
# 递归的方式,继续提取下一页数据
get_ssjy_data(page=next_page)
else:
# 数据提取完毕
print('数据爬取完毕')
if __name__ == '__main__':
get_ssjy_data()
requests用法
一、什么是requests?
- requests是基于urllib的再一次封装,具有urllib的一切特性,并且API调用更加方便,一个基于网络请求的模块,模拟浏览器发起请求
二、为什么使用requests模块?
- 1.自动处理url编码
- 2.自动处理post请求参数
- 3.简化cookie和代理的操作
- cookie的操作:
- a.创建一个cookiejar对象
- b.创建一个handler对象
- c.创建一个opener对象
- 代理的操作:
- a.创建handler对象,代理ip和端口封装到该对象
- b.创建opener对象
三、如何安装?
安装:pip3 install requests
使用流程:
1.指定url
2.使用requests模块发起请求
3.获取响应的二进制数据
4.进行持久化存储
requests包括五中请求:get,post,ajax的get请求,ajax的post请求,综合
requests的get请求
url = 'http://top.hengyan.com/dianji/default.aspx?'
# 将get请求的参数放在字典中
params = {
'p': 1
}
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
}
response = requests.get(url=url, headers=headers, params=params)
# 获取html页面源码
html = response.text
# 获取页面的二进制数据
b_content = response.content
# 获取响应的状态码
code = response.status_code
# 获取请求的响应头
response_headers = response.headers
# 获取请求的url地址
url = response.url
# 获取cookies信息(使用requests模拟登陆网站后获取cookies)
cookies = response.cookies
# 将RequestsCookieJar转换成字典
cookies_dict = requests.utils.dict_from_cookiejar(cookies)
# 将字典转换成RequestsCookieJar
cookiesjar_obj = requests.utils.cookiejar_from_dict(cookies_dict)
requests的post用法
url = 'http://search.jiayuan.com/v2/search_v2.php'
# 构建请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3722.400 QQBrowser/10.5.3738.400'
}
form_data = {
'sex': 'f',
'key': '',
'stc': '1:11,2:20.28,23:1',
'sn': 'default',
'sv': '1',
'p': '1',
'f': 'search',
'listStyle': 'bigPhoto',
'pri_uid': '0',
'jsversion': 'v5',
}
response = requests.post(url=url, data=form_data, headers=headers)
if response.status_code == 200:
pattern = re.compile('##jiayser##(.*?)##jiayser//', re.S)
json_str = re.findall(pattern=pattern, string=response.text)[0]
json_data = json.loads(json_str)
自定义请求头信息:
from fake_useragent import UserAgent
定制请求头
headers ={
"User-Agent":UserAgent().random
}
封装get请求参数:
params = {
"变量名":"参数"
}
requests库中的session作用:
- 维持统一会话,在跨请求访问的时候能够保存一些信息(比如cookies)
cookie:
1.基于用户的用户数据
2.需求:爬取xx用户的豆瓣网的个人主页数据
cookie作用:服务端使用cookie来记录客户端的状态信息
实现流程:
- 1.执行登录操作(获取cookie)
- 2.在发起个人主页请求时,需要将cookie携带到该请求中
- 注意:session对象:发送请求(会将cookie对象进行自动存储)