python 中的网络请求模块

  • urllib 古老不好用
  • requests 学习重点

request模块

基于网络的请求的模块,功能强大,简单高效

作用:模拟浏览器发请求

如何使用:(requests模块编码流程)

  • 指定url
  • 发起请求
  • 获取相应数据
  • 持久化存储

实战:

01.requests第一血

  1. import requests
  2. if __name__ == '__main__':
  3. # 指定url
  4. url = 'https://www.sogou.com/'
  5. # 访问网页
  6. response = requests.get(url=url)
  7. # 获取数据
  8. page_text = response.text
  9. print(page_text)
  10. # 持久化数据
  11. with open('baidu.html', 'w', encoding='utf-8') as fp:
  12. fp.write(page_text)

02.requests实战之网页采集器

  1. import requests
  2. if __name__ == '__main__':
  3. # UA伪装
  4. headers = {
  5. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.52'
  6. }
  7. # 指定url
  8. url = "https://www.sogou.com/web"
  9. kw = input("请输入关键词:")
  10. # 请求参数
  11. param = {
  12. 'query': kw
  13. }
  14. # 发送get请求
  15. response = requests.get(url=url, params=param, headers=headers)
  16. page_text = response.text
  17. fileName = kw + '.html'
  18. # 写入文件
  19. with open(fileName, 'w', encoding='utf-8') as file:
  20. file.write(page_text)
  21. print(fileName, '写入成功')

需求:

每个网站都有用户身份UA的检测,如果我们没有设置UA身份的话会被检测出来我们是爬虫,就无法去获取资源所以我们就需要进行UA身份伪装

User-Agent:

  1. Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.52

网站都有UA检测所以我们要使用UA伪装

03.requests实战之破解百度翻译

  1. import requests
  2. import json
  3. # https://fanyi.baidu.com/sug
  4. if __name__ == '__main__':
  5. # 1.指定url
  6. post_url = 'https://fanyi.baidu.com/sug'
  7. # 2.UA伪装
  8. headers = {
  9. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.52'
  10. }
  11. # 3.设置请求参数
  12. word = input('请输入英文字母')
  13. data = {
  14. 'kw': word
  15. }
  16. # 4.发送请求
  17. response = requests.post(url=post_url, headers=headers, data=data)
  18. # 5.获取相应数据,如果确定是json类型的才能使用json()方法
  19. dic_obj = response.json()
  20. # 6.持久化处理
  21. fileName = word + '.json'
  22. # 写法1
  23. fp = open(fileName, 'w', encoding='utf-8')
  24. json.dump(dic_obj, fp=fp, ensure_ascii=False)
  25. print("over!!!!")
  26. # 写法2
  27. with open(fileName, 'w', encoding='utf-8') as fp:
  28. json.dump(dic_obj, fp=fp, ensure_ascii=False)
  29. print("over!!!!")

chrom 自带抓包工具

XHR表示Ajax请求

1607094379273.png
通过数据包的分析发现sug 是对后段的Ajax的请求
1607094492751.png
点开preview发现请求回的数据,是一组json数据
1607094536280.png

发现百度翻译的接口
1607094618104.png

需求:

  1. 使用post请求
  2. 返回的数据是一个json数据

04.requests实战之豆瓣电影爬取

分析:

  • 我们打开页面发现页面数据局部刷新并且地址栏没有发生改变,
  • 得出此页面使用的是懒加载,那一定就是使用了Ajax请求
  • 通过抓包工具发现了此页面的接口

1607130603436.png
获取url地址为:

  1. https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=playable&start=1&limit=250

python代码

  1. import requests
  2. import json
  3. if __name__ == '__main__':
  4. # 1.确定url
  5. url = 'https://movie.douban.com/j/chart/top_list'
  6. # 2.UA伪装
  7. headers = {
  8. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
  9. 'Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.52 '
  10. }
  11. # 3.请求参数 &interval_id=100%3A90&action=playable&start=1&limit=250
  12. params = {
  13. 'type': '11',
  14. 'interval_id': '100:90',
  15. 'action': 'playable',
  16. 'start': '1',
  17. 'limit': '250',
  18. }
  19. # 4.发送get请求
  20. response = requests.get(url=url, headers=headers, params=params)
  21. dic_obj = response.json()
  22. print(dic_obj)
  23. # 文件持久化
  24. with open('豆瓣电影.json', 'w', encoding='utf-8') as fp:
  25. json.dump(dic_obj, fp=fp, ensure_ascii=False)

05.requests实战之肯德基餐厅位置爬取

爬取流程类似于豆瓣

肯德基官方网站 - Welcome to KFC.com.cn
轻松获得接口
image.png

06.requests实战之药监总局相关数据爬取