urllib、requests的用法

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对象进行自动存储)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容