• 网络爬虫——urllib(4)文末好书推荐


    前言🍭

     ❤️❤️❤️网络爬虫专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️

    Python网络爬虫_热爱编程的林兮的博客-CSDN博客

     上篇我们讲解了百度详细翻译这个案例,这篇同样也是进行案例讲解。

    9.ajax的get请求🍉

    Ⅰ、ajax的get请求请求豆瓣电影第一页🍓

    我们打开豆瓣电影,随便打开一个排行榜(电影->剧情)

    豆瓣电影分类排行榜 - 剧情片 (douban.com)

    我们F12,打开开发者工具

    打开第一个接口,可以看到只有网页,没有数据,我们继续找

    找到下面这个,发现了“肖申克的救赎” ,但是这个只有一个数据啊,继续找

     我们又找到一个,有20个数据(都是json格式的,因为它给我们返回的就是json数据,前后端分离),我们打开来看看

     前面两个是 肖申克的救赎霸王别姬

    最后一个(第二十个)是 海上钢琴师 

    果然 第二十部电影是 海上钢琴师 

    这个接口就是我们想要的数据,好下面我们来写代码:

     这是get请求,我们就按get请求来做。

    1. # get请求
    2. # 获取豆瓣电影的第一页的数据 并且保存起来
    3. import urllib.request
    4. # header中的url
    5. url = 'https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=0&limit=20'
    6. headers = {
    7. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
    8. }
    9. # (1) 请求对象的定制
    10. request = urllib.request.Request(url=url, headers=headers)
    11. # (2)获取响应的数据
    12. response = urllib.request.urlopen(request)
    13. content = response.read().decode('utf-8')
    14. print(content)

    我们先打印出来,看看有什么问题

    好像没问题,我们继续写代码,我们将json数据下载下来:

    1. # get请求
    2. # 获取豆瓣电影的第一页的数据 并且保存起来
    3. import urllib.request
    4. # header中的url
    5. url = 'https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=0&limit=20'
    6. headers = {
    7. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
    8. }
    9. # (1) 请求对象的定制
    10. request = urllib.request.Request(url=url, headers=headers)
    11. # (2)获取响应的数据
    12. response = urllib.request.urlopen(request)
    13. content = response.read().decode('utf-8')
    14. # print(content)
    15. # (3) 数据下载到本地
    16. # open方法默认情况下使用的是gbk的编码 如果我们要想保存汉字 那么需要在open方法中指定编码格式为utf-8
    17. with open('douban1.json', 'w', encoding='utf-8') as fp:
    18. fp.write(content)

     运行代码,然后就下载好了,我们将前20条数据下载好了:

     下面我们来下载豆瓣电影的前十页

     Ⅱ、ajax的get请求请求豆瓣电影前十页🍓

     我们在上面知道了,豆瓣电影中一组数据有20部电影,我们继续往下滑,它还有第21部,22部电影

    同样的我们去 开发者工具中找到第二组数据:

    ​ 同样的我们去找第三组第四组数据:

    1. # https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=0&limit=20
    2. # https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=20&limit=20
    3. # https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=40&limit=20
    4. # https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=60&limit=20

    然后去观察规律

    我们发现只有start的键值对 的值不一样,很明显可以看出start值是(page-1)*20

    从这里我们就找到了start和page的关系

    下面我们来写代码

    1. # https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=0&limit=20
    2. # https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=20&limit=20
    3. # https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=40&limit=20
    4. # https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=60&limit=20
    5. # start (page - 1)*20
    6. import urllib.parse
    7. import urllib.request
    8. def create_request(page):
    9. base_url = 'https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&'
    10. data = {
    11. 'start': (page - 1) * 20,
    12. 'limit': 20
    13. }
    14. data = urllib.parse.urlencode(data)
    15. url = base_url + data
    16. headers = {
    17. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
    18. }
    19. request = urllib.request.Request(url=url, headers=headers)
    20. return request
    21. def get_content(request):
    22. response = urllib.request.urlopen(request)
    23. content = response.read().decode('utf-8')
    24. return content
    25. # page强制类型转换 否则拼接不上
    26. def down_load(page, content):
    27. with open('douban_' + str(page) + '.json', 'w', encoding='utf-8') as fp:
    28. fp.write(content)
    29. # 程序的入口
    30. if __name__ == '__main__':
    31. start_page = int(input('请输入起始的页码'))
    32. end_page = int(input('请输入结束的页面'))
    33. for page in range(start_page, end_page + 1):
    34. # 每一页都有自己的请求对象的定制
    35. request = create_request(page)
    36. # 获取响应的数据
    37. content = get_content(request)
    38. # 下载
    39. down_load(page, content)

    运行代码我们就将前十页json数据都下载好了 

    10.ajax的post请求 🍉

    下面我们来爬取一下KFC,查看一下北京这个城市哪个位置有KFC,并且保存数据。

    肯德基餐厅信息查询 (kfc.com.cn)

     可以看到这里有很多KFC店

    我们查看url,同时也可以看到这是POST请求

     一样的,我们观察不同页数的url区别 

    1. # 1页
    2. # http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname
    3. # post
    4. 表单数据
    5. # cname: 北京
    6. # pid:
    7. # pageIndex: 1
    8. # pageSize: 10
    9. # 2页
    10. # http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname
    11. # post
    12. 表单数据
    13. # cname: 北京
    14. # pid:
    15. # pageIndex: 2
    16. # pageSize: 10

     下面我们来写代码,去爬取北京KFC位置信息

    1. # 1页
    2. # http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname
    3. # post
    4. # cname: 北京
    5. # pid:
    6. # pageIndex: 1
    7. # pageSize: 10
    8. # 2页
    9. # http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname
    10. # post
    11. # cname: 北京
    12. # pid:
    13. # pageIndex: 2
    14. # pageSize: 10
    15. import urllib.request
    16. import urllib.parse
    17. def create_request(page):
    18. base_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'
    19. data = {
    20. 'cname': '北京',
    21. 'pid': '',
    22. 'pageIndex': page,
    23. 'pageSize': '10'
    24. }
    25. data = urllib.parse.urlencode(data).encode('utf-8')
    26. headers = {
    27. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
    28. }
    29. request = urllib.request.Request(url=base_url, headers=headers, data=data)
    30. return request
    31. def get_content(request):
    32. response = urllib.request.urlopen(request)
    33. content = response.read().decode('utf-8')
    34. return content
    35. def down_load(page, content):
    36. with open('kfc_' + str(page) + '.json', 'w', encoding='utf-8') as fp:
    37. fp.write(content)
    38. if __name__ == '__main__':
    39. start_page = int(input('请输入起始页码'))
    40. end_page = int(input('请输入结束页码'))
    41. for page in range(start_page, end_page + 1):
    42. # 请求对象的定制
    43. request = create_request(page)
    44. # 获取网页源码
    45. content = get_content(request)
    46. # 下载
    47. down_load(page, content)

     运行代码,我们就爬取好了,数据也能对上

     好书推荐:ChatGPT进阶:提示工程入门

    爆火全网的原创提示词设计框架BROKE,带你5步掌握向人工智能提问的艺术,从小白变身ChatGPT应用专家,将AI转化为生产工具,重塑你的工作流!

    内容简介

    本书是一本面向所有人的提示工程工具书,旨在帮助你掌握并有效利用以ChatGPT为代表的AI工具。学习完本书后,你将能够自如地将ChatGPT运用在生活和专业领域中,成为ChatGPT进阶玩家。

    本书共分为9章,内容涵盖三个层次:介绍与解读、入门学习、进阶提升。第1~2章深入介绍与剖析了ChatGPT与提示工程,并从多个学科的角度探讨了提示工程学科。第3~5章演示了ChatGPT的实际运用,教你如何使用ChatGPT解决自然语言处理问题,并为你提供了一套可操作、可重复的提示设计框架,让你能够熟练驾驭ChatGPT。第6~9章讲解了来自学术界的提示工程方法,以及如何围绕ChatGPT进行创新;此外,为希望ChatGPT进行应用开发的读者提供了实用的参考资料,并介绍了除ChatGPT之外的其他选择。

    本书聚焦ChatGPT的实际应用,可操作,可重复,轻松易读却不失深度。无论你是对ChatGPT及类似工具充满好奇,还是期待将其转化为生产力,本书都值得一读。此外,本书还可作为相关培训机构的教材。

    购买链接

    京东购买链接:https://item.jd.com/14098844.html

    当当购买链接:http://product.dangdang.com/29612772.html

    参与方式

    关注博主、点赞、收藏、评论区任意评论(评论折叠无效)

    即可参与送书活动!

    开奖时间:2023-10-28 21:00:00

  • 相关阅读:
    C#WPF属性触发器实例
    QT:文件介绍
    web安全学习笔记(11)
    .NET Core使用NPOI导出复杂,美观的Excel详解
    Flutter SQLite 教程之笔记App 数据存储CRUD操作基于 Flutter Sqflite 插件
    不使用canvas怎么实现一个刮刮卡效果?
    Docker安装superset
    【无标题】
    如何做架构设计?
    图片操作笔记-滤波-python
  • 原文地址:https://blog.csdn.net/m0_63951142/article/details/134013573