python爬虫学习笔记3.1-请求模块入门1


urllib和requests库的作用都是发送网络请求返回相应数据,urllib是python内置库,requests的底层实现就是urllib。

urllib和requests各有优缺点,使用requests主要是因为比urllib简单。下面分别对这两种库进行介绍。

参考文档

requests中文文档API

urllib

urllib.request模块

版本

  • python2 :urllib2、urllib
  • python3 :把urllib和urllib2合并,urllib.request

常用的方法

  • urllib.request.urlopen(“网址”)
    • 【向网站发起一个请求并获取响应】
  • 字节流 = response.read()
  • 字符串 = response.read().decode(“utf-8”)
  • urllib.request.Request(“网址”,headers=“字典”)
    • 【urlopen()不支持重构User-Agent】

响应对象

  • read()
    • 【读取服务器响应的内容】
  • getcode()
    • 【返回HTTP的响应码】
  • geturl()
    • 【返回实际数据的URL(防止重定向问题)】

urllib.request简单应用

import urllib.request
url='https://www.baidu.com/'
headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
}
#1.创建请求的对象Request
req=urllib.request.Request(url,headers=headers)
#2.获取响应对象urlopen
res=urllib.request.urlopen(req)
#3.读取响应内容read
html=res.read().decode('utf-8')
#4.打印实际请求的url
# print(html)
# print(res.getcode())# 返回状态码
print(res.geturl())# 返回实际请求的url

urllib.parse

常用方法

  • urlencode(字典)
  • quote(字符串) (这个里面的参数是个字符串)

请求方式

  • GET
    • 【查询参数在URL地址中显示】
  • POST
    • 在Request方法中添加data参数
    • urllib.request.Request(url,data=data,headers=headers)
    • data :表单数据以bytes类型提交,不能是str

urllib.parse简单应用

练习1:使用parse.urlencode对url中的中文字符进行编码

浏览器会对这个url进行一个编码。(除英文字母、数字和部分标识其他的全部使用% + 十六进制码进行编码)

中文在url中显示的形式

url = ‘https://www.baidu.com/s?wd=%E6%B5%B7%E8%B4%BC%E7%8E%8B’

中文的实际形式

'https://www.baidu.com/s?wd=火影忍者

url = 'https://www.baidu.com/s?wd=%E6%B5%B7%E8%B4%BC%E7%8E%8B'
import urllib.parse
te = {'wd': '海贼王'}
result = urllib.parse.urlencode(te)
# 编码 wd=%E6%B5%B7%E8%B4%BC%E7%8E%8B
print(result)

te1={'wd':'火影忍者'}
res=urllib.parse.urlencode(te1)
# wd=%E7%81%AB%E5%BD%B1%E5%BF%8D%E8%80%85
print(res)
练习2 搜索一个内容 把这个数据保存到本地 html
import urllib.parse
import urllib.request

baseurl = 'https://www.baidu.com/s?'
key = input('请输入你要搜索的内容:')
w={'wd':key}
# 编码
k=urllib.parse.urlencode(w)
# 拼接url
url=baseurl+k
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36','Cookie':'BIDUPSID=23F0C104655E78ACD11DB1E20FA56630; PSTM=1592045183; BD_UPN=12314753; sug=0; sugstore=0; ORIGIN=0; bdime=0; BAIDUID=23F0C104655E78AC9F0FB18960BCA3D3:SL=0:NR=10:FG=1; BDUSS=ldxR1FyQ2FEaVZ5UWFjTDlRbThVZHJUQTY1S09PSU81SXlHaUpubVpEY0FMakZmRVFBQUFBJCQAAAAAAAAAAAEAAADzvSajSjdnaGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChCV8AoQlfb; BDUSS_BFESS=ldxR1FyQ2FEaVZ5UWFjTDlRbThVZHJUQTY1S09PSU81SXlHaUpubVpEY0FMakZmRVFBQUFBJCQAAAAAAAAAAAEAAADzvSajSjdnaGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChCV8AoQlfb; MCITY=-158%3A; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BD_HOME=1; delPer=0; BD_CK_SAM=1; PSINO=6; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; BDRCVFR[tox4WRQ4-Km]=mk3SLVN4HKm; BDRCVFR[-pGxjrCMryR]=mk3SLVN4HKm; BDRCVFR[CLK3Lyfkr9D]=mk3SLVN4HKm; COOKIE_SESSION=204_0_5_9_4_6_0_0_5_4_0_0_533_0_0_0_1602246393_0_1602250500%7C9%2369429_193_1601361993%7C9; H_PS_PSSID=32757_32617_1428_7566_7544_31660_32723_32230_7517_32116_32718; H_PS_645EC=ab4cD3QpA7yZJBKDrrzZqesHzhDrwV%2BYww0WVHtmGJ3Adcj0qvjZIVV%2F9q4'
}

# 创建请求对象
req = urllib.request.Request(url,headers=headers)
# 获取响应对象
res = urllib.request.urlopen(req)
# 读取响应对象
html = res.read().decode('utf-8')
# 写入文件
with open('resourse/搜索3.html', 'w', encoding='utf-8') as f:
    f.write(html)

requests

安装方式

  • pip install requests【在pycharm的Terminal中安装,在cmd中会有奇怪的问题】
  • 在开发工具中安装File | Settings | Project: pyth | Project Interpreter

request常用方法

requests.get(网址)

响应对象response的方法

  • response.text
    • 【返回unicode格式的数据(str)】
  • response.content
    • 【返回字节流数据(二进制)】
  • response.content.decode(‘utf-8’)
    • 【手动进行解码】
  • response.url
    • 【返回url】
  • response.encode() = ‘编码’
    • 【编码】

request简单应用

练习1:requests入门

import requests

headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
    }
# 发送请求
response = requests.get('https://qq.yh31.com/zjbq/2920180.html',headers=headers)

# 打印响应对象
# print(response.text) # 返回str类型的数据
# print(response.content) # 返回的是字节流的数据

# 第一种解决乱码的方式 最本质的方式(推荐)
print(response.content.decode('utf-8'))

# 第二种
# response.encoding = 'utf-8'
# print(response.text)

练习2:下载图片

# 快捷键 ctrl+/ 批量去除注释
# 方式1使用requess
import requests
url = 'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2534506313,1688529724&fm=26&gp=0.jpg'
# 获取请求
req = requests.get(url)
# 创建或打开文件
fn=open('4.jpg','wb')
# 写入文件
fn.write(req.content)
fn.close()
# 写入文件
with open('code2.jpg','wb') as f:
    f.write(req.content)
# # 方式2使用urllib
# from urllib import request
# url = 'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2534506313,1688529724&fm=26&gp=0.jpg'
# request.urlretrieve(url, 'resourse/5.jpg')

requests设置代理

只需要在请求方法中(get/post)传递proxies参数。

代理网站

  • 西刺免费代理IP:http://www.xicidaili.com/
  • 快代理:http://www.kuaidaili.com/
  • 代理云:http://www.dailiyun.com/

免费的东西总是最贵的,免费代理一般都被用完了,而且即使遇到可以使用的代理往往会有奇葩问题,谨慎使用!!

练习1: requests设置代理ip

import requests
# 设置代理
proxy = {
    'http':'175.42.158.172:9999'
}
url = 'http://httpbin.org/ip'
res = requests.get(url,proxies=proxy)
print(res.text)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值