Python爬虫网络请求 requests(get、post)

Python网络请求模块

urllib

Urllib 库,它是 Python 内置的 HTTP 请求库,也就是说我们不需要额外安装即可使用,它包含四个模块

第一个模块 request,它是最基本的 HTTP 请求模块,我们可以用它来模拟发送一请求,就像在浏览器里输入网址然后敲击回车一样,只需要给库方法传入 URL 还有额外的参数,就可以模拟实现这个过程了。

第二个 error 模块即异常处理模块,如果出现请求错误,我们可以捕获这些异常,然后进行重试或其他操作保证程序不会意外终止。

第三个 parse 模块是一个工具模块,提供了许多 URL 处理方法,比如拆分、解析、合并等等的方法。

第四个模块是 robotparser,主要是用来识别网站的 robots.txt 文件,然后判断哪些网站可以爬,哪些网站不可以爬的,其实用的比较少。

比较古老,封装的相关基于爬虫的操作相对比较麻烦、繁琐、复杂的
requests出现逐渐代替了urllib

requests

定义

requests模块:Python中原生的一款基于网络请求的模块

特点

  1. 功能强大
  2. 简单便捷
  3. 效率高

作用

模拟浏览器发送请求

浏览器发送请求流程

  1. 指定URL
  2. 发起HTTP/HTTPS请求(get)
  3. 获取响应数据

requests发送请求流程

  1. 指定URL
  2. 发起HTTP/HTTPS请求(get/post)
  3. 获取响应数据
  4. 持久化存储

requests编码流程

安装环境

安装requests模块 pip install requests

	pip install requests

在这里插入图片描述

实战编码
爬取搜狗首页的页面数据

请求搜狗首页,并且把html的源码写入sogo.html文件中

import requests
if __name__ == "__main__":
    url = 'https://www.sogo.com/'
    response = requests.get(url=url)
    page_text = response.text
    with open('./requests/sogo.html', 'w', encoding='utf-8') as fp:
        fp.write(page_text)
    print('over')

打开文件,没有相应的样式,我们只需要数据。
在这里插入图片描述

UA伪装

UA:user-agent(请求载体的身份标识)

UA检测/反爬机制:门户网站的浏览器会检测对应请求的载体身份标识,如果检测到载体的身份标识为某一款浏览器,则说明此次请求为一次正常的请求(服务器端不会拒绝正常请求。反之,则认为该请求为不正常的请求(爬虫),服务器很有可能拒绝请求。(反爬机制)

正常请求的user-agent:
在这里插入图片描述
UA伪装/反反爬机制:将爬虫对应请求的载体身份标识为某一款浏览器(不进行伪装可能得不到数据或乱码数据)

UA伪装获取搜狗搜索数据

import requests
if __name__ == "__main__":
    headers = {
   
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
    }
    url = 'https://www.sogou.com/web'
    kw = input('enter a keyword:')
    param = {
   
        'query': kw
    }
    response = requests.get(url=url, params=param, headers=headers)
    page_text = response.text
    with open('./requests/sogo.html', 'w', encoding='utf-8') as fp:
        fp.write(page_text)
    print('over')
百度翻译

UI输入关键词后,进行ajax请求,响应json数据
在这里插入图片描述
json数据

{
   "errno":0,"data":[{
   "k":"dog","v":"n. \u72d7; \u8e69\u811a\u8d27; \u4e11\u5973\u4eba; \u5351\u9119\u5c0f\u4eba v. \u56f0\u6270; \u8ddf\u8e2a"},{
   "k":"DOG","v":"abbr. Data Output Gate \u6570\u636e\u8f93\u51fa\u95e8"},{
   "k":"doge","v":"n. \u5171\u548c\u56fd\u603b\u7763"},{
   "k":"dogm","v":"abbr. dogmatic \u6559\u6761\u7684; \u72ec\u65ad\u7684; dogmatism \u6559\u6761\u4e3b\u4e49; dogmatist"},{
   "k":"Dogo","v":"[\u5730\u540d] [\u9a6c\u91cc\u3001\u5c3c\u65e5\u5c14\u3001\u4e4d\u5f97] \u591a\u6208; [\u5730\u540d] [\u97e9\u56fd] \u9053\u9ad8"}]}

Python获取结果百度翻译结果,使用json() 获取的是对象,text() 获取的是字符串

import requests
import json
if __name__ == "__main__":
    headers = {
   
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
    }
    kw = input('enter a kewword:')
    data = {
   'kw': kw}
    url = 'https://fanyi.baidu.com/sug'
    response = requests.post(url=url, data=data, headers=headers)
    json_data = response.json()
    print(json_data)
    fp = open('../' + kw + '.json', 'w', encoding='utf-8')
    json.dump(json_data, fp=fp, ensure_ascii=False)
    print('over')

在这里插入图片描述
持久化存储值json文件:
在这里插入图片描述

豆瓣电影
import requests
import json
if __name__ == "__main__":
    headers = {
   
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
    }
    params = {
   'type': '24',  # 电影类型 24--喜剧
              'interval_id': '100: 90',
              'action': '',
              'start': '0',  # 从第几部开始取
              'limit': '20'}  # 每次多少部
    url = 'https://movie.douban.com/j/chart/top_list'
    response = requests.get(url=url, params=params, headers=headers)
    json_data = response.json()
    print(json_data)
    fp = open('./requests/douban.json', 'w', encoding='utf-8')
    json.dump(json_data, fp=fp, ensure_ascii=False)
    print('over')
爬取肯德基餐厅信息
import requests
import json
if __name__ == "__main__":
    headers = {
   
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
    }
    data = {
   
        'cname': '',
        'pid': '',
        'keyword': '厦门',
        'pageIndex': '1',
        'pageSize': '10'
    }
    url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
    response = requests.post(url=url, data=data, headers=headers)
    text_data = response.text
    print(text_data)
    fp = open(
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值