爬虫基础之 Requests"/>
Python爬虫基础之 Requests
Requests
1.初识Requests
1.1Requests是什么?
在使用python爬虫时,需要模拟发起网络请求,主要用到的就是requests库和python内置的urllib库,requests是对Urllib的再次封装。
1.2Requests和Urllib的区别
requests可以直接构建常用的get和post请求并发起,而Urllib一般要先构建get或者post请求,然后再发起请求。
2.Requests库的使用
2.1Requests库的基本使用
以爬取百度网页为例,展示
import requestsurl = ''headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36','Cookie': 'BIDUPSID=93EF1841978DEC20F562F5B93FD8658C; PSTM=1678945034; BAIDUID=93EF1841978DEC20B21B3F434A91DD22:FG=1; BD_UPN=12314753; COOKIE_SESSION=44113_2_5_6_5_1_1_0_5_1_0_0_119780_5_0_0_1681221579_1679124123_1681265688%7C6%230_2_1679124116%7C1; BAIDUID_BFESS=93EF1841978DEC20B21B3F434A91DD22:FG=1; BA_HECTOR=0k05a0818lak018k000h01091i3hp031n; ZFY=o8ZeUjIcvHNzbZQkt5n5OZdpAMNcE7BScWXVgLKMnfc:C; B64_BOT=1; channel=baidusearch; baikeVisitId=e4768d47-8e26-496e-8b83-c40edd711e84; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; BD_HOME=1; H_PS_PSSID=38515_36554_38470_38368_38468_36803_37928_37709_26350',
}response = requests.get(url=url, headers=headers)# 一个类型和六个属性
# Response类型
print(type(response))# 设置响应的编码格式
response.encoding = 'utf-8'# 以字符串的形式返回网页的源码
print(response.text)# 返回一个url地址
print(response.url)# 返回的是二进制的数据
print(response.content)# 返回响应的状态码
print(response.status_code)# 返回响应头
print(response.headers)
2.2Requests的get请求
以百度搜索为例
import requestsurl = '?'headers = {'User-Agent': 'Mozilla/5.0(Linux;Android6.0;Nexus5Build / MRA58N) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 110.0.0.0MobileSafari / 537.36Edg / 110.0.1587.69',
}kw = input("请输入你要搜索的关键词:")data = {wd : kw,
}# url 请求的资源路径
# params 参数
# kwarys 字典
response = requests.get(url=url, params=data, headers=headers)
response.encoding = 'utf-8' # 指点编码格式content = response.text# 将爬取的源码写入文件
with open('beijing.html', 'w', encoding='utf-8') as fp:fp.write(content)
总结:
(1)参数使用params传递
(2)不需要请求对象定制
(3)请求资源路径中的?可以加也可以不加
可能出现的问题:
(1)若将获取的源码输出到控制台显示的源码可能不全
原因是pycharm对控制台输出内容的大小做了限制,可以在帮助中的“编辑自定义属性”中追加数据修改,具体操作可到网上寻找教程。
也可以将源码直接存储在文件中,无大小限制可以看到爬取的全部内容。
(2)爬取的源码看起来很乱
原因是爬取的源码未格式化,可以存储到文件中进行格式化,使内容排版符合格式。
2.3Requests的post请求
以百度翻译获取查找单词的中文示意为例
import requestsurl = ''headers = {'User-Agent': 'Mozilla/5.0(Linux;Android6.0;Nexus5Build / MRA58N) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 110.0.0.0MobileSafari / 537.36Edg / 110.0.1587.69',
}data = {'kw': 'eye'
}# url 请求地址
# data 请求参数
# kwargs 字典
response = requests.post(url=url, data=data, headers=headers)
response.encoding = 'utf-8'content = response.text# 返回的是json数据,需要用到json
print(content)import json# load 访问文件 loads 访问内容
# obj = json.loads(content, encoding='utf-8') 这样写会报错,因为python3.9以上已经没有 encoding 这个参数了obj = json.loads(content)print(obj)
注意:百度翻译需要在英文状态下 的输入法输入英文单词,不然会找不到sug(其中包含post请求的url)
2.4Requests的代理
import requestsurl = ''headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
}data = {'wd':'ip'
}proxy = {'http':'212.129.251.55.16816'
}response = requests.get(url=url, params=data, headers=headers)content = response.textwith open('daili.html', 'w', encoding='utf-8') as fp:fp.write(content)
更多推荐
Python爬虫基础之 Requests
发布评论