当前位置:   article > 正文

【python爬虫】爬虫基础_阿贾克斯请求

阿贾克斯请求

目录

1.爬虫简介

2.爬虫的合法性探究

3.爬虫的初始探入

4.BeautifulSoup库

5.requests模块

5.1 实战:爬取搜狗首页的页面数据

5.2 实战之网页采集器

5.2.1 UA伪装

5.2.2 实战代码

5.3 实战之破解百度翻译

5.4 爬取豆瓣高分电影分类排行榜


1.爬虫简介

什么是爬虫?

——指通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程。

爬虫有什么价值?

 总的来说爬虫的价值就是:实际应用、就业

2.爬虫的合法性探究

爬虫究竟合法还是违法?

——在法律上不被禁止

——具有违法风险

——善意爬虫 恶意爬虫:抢票

带来的风险:

   ——爬虫干扰了被访问网站的正常运营

   ——爬虫抓取了受到被法律保护的特定类型的数据或信息

如何在使用编写爬虫的过程中避免进入局子的厄运呢?

——时常优化自己的程序,避免干扰被访问网站的正常运行

——在使用传播爬取到的数据时,审查抓取到的内容,如果发现了涉及到用户隐私商业机密等敏感内容,需要即时停止爬取或传播

3.爬虫的初始探入

爬虫在使用场景中的分类

——通用爬虫:

      抓取系统的重要组成部分。抓取的是一整张页面数据

——聚焦爬虫:

      建立在通用爬虫的基础上。抓取的是页面中特定的局部内容。

——增量式爬虫:

      监测网站中数据更新的情况。只会抓取网站中最新更新出来的数据。

爬虫的矛与盾:

反爬机制:

    相关门户网站,可以通过制定相应的策略或技术手段,防止爬虫程序进行网站数据的爬取。

反反爬机制:

    爬虫程序可以通过制定相关策略或技术手段,破解门户网站具备的反爬机制,从而可以获取门户网站的信息。

robots.txt协议:

  君子协议。规定了网站中哪些数据可以被爬虫爬取哪些不能被爬取。

4.BeautifulSoup库

Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。详细不过多介绍了

Beautiful  Soup库的引用
Beautiful Soup库,也叫beautifulsoup4 bs4
约定引用方式如下,即主要是用BeautifulSoup
  1. from bs4 import BeautifulSoup
  2. import bs4

html基本格式:

  1. <html>
  2. <head>
  3. <title>This is a python demo page</title>
  4. </head>
  5. <body>
  6. <p class="title">
  7. <b>The demo python introduces several python courses.</b>
  8. </p>
  9. <p class=“course”>Python is a wonderful general‐purpose programming language.
  10. You can learn Python from novice to professional by tracking the following courses:
  11. <a href="http://www.icourse163.org/course/BIT‐268001" class="py1"
  12. id="link1">Basic Python</a> and
  13. <a href="http://www.icourse163.org/course/BIT‐1001870001" class="py2"
  14. id="link2">Advanced Python</a>.
  15. </p>
  16. </body>
  17. </html>
  18. <></>构成了所属关系

5.requests模块

——urllib模块:古老

——requests模块:简洁高效

什么是requests模块?

  python中原生的一款基于网络请求的模块,功能强大,效率极高

作用:模拟浏览器发请求。

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

    ——指定url

    ——发起请求

    ——获取响应数据

    ——持久化存储

环境安装:

  pip install requests

5.1 实战:爬取搜狗首页的页面数据

  1. import requests
  2. if __name__ == '__main__':
  3. # 指定url
  4. url = 'http://www.sogou.com/'
  5. # 发起请求
  6. # get方法返回一个响应对象
  7. response = requests.get(url=url)
  8. # 获取响应数据:text返回的是字符串形式的响应数据:
  9. page_text = response.text
  10. print(page_text)
  11. # 持久化存储
  12. with open('./sogou.html','w',encoding='utf-8') as fp:
  13. fp.write(page_text)
  14. print('爬取数据结束')

5.2 实战之网页采集器

5.2.1 UA伪装

UA伪装:让爬对应的请求载体身份标识伪装成某一浏览器

UA:User-Agent(请求载体的身份标识)

1 直接访问 ip地址查询

 2.浏览器直接console输入  alert(navigator.userAgent)

  门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识为某一浏览器,则说明是一正常请求,但请求的载体身份标识不是基于某一款浏览器的,则这一请求是不正常的请求(爬虫),服务器端可能会拒绝该次请求。所以要进行UA伪装

5.2.2 实战代码

  1. import requests
  2. if __name__ == '__main__':
  3. # UA伪装:将对应的User—Agent封装到一个字典中
  4. headers = {
  5. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53'
  6. }
  7. url = 'https://cn.bing.com/search?'
  8. # 处理url携带的参数:封装到字典中
  9. kw = input('enter a word')
  10. param = {
  11. 'q': kw
  12. }
  13. # 对指定的url发起的请求对应的url是带参数的,并且请求过程中处理了参数
  14. response = requests.get(url=url, params=param, headers=headers)
  15. page_text = response.text
  16. fileName = kw+'.html'
  17. with open(fileName, 'w', encoding='utf-8') as fp:
  18. fp.write(page_text)
  19. print('保存成功')

5.3 实战之破解百度翻译

找阿贾克斯(ajax)请求

    ——对应的请求是post请求,携带了参数

    ——响应数据是一组json数据

  1. import requests
  2. import json
  3. if __name__ == '__main__':
  4. # 指定URL
  5. post_url = 'https://fanyi.baidu.com/sug'
  6. # 进行UA伪装
  7. headers = {
  8. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53'
  9. }
  10. # post请求参数处理,同get请求一致
  11. word = input('enter a word:')
  12. data = {
  13. 'kw': word
  14. }
  15. # 请求发送
  16. response = requests.post(url=post_url, data=data, headers=headers)
  17. # 获取相应数据json() 返回的是一个字典对象(如果确认响应数据是json类型才使用json)
  18. dic_obj = response.json()
  19. # 持久化存储
  20. fileName = word+'.json'
  21. fp = open(fileName, 'w', encoding='utf-8')
  22. #中文不能使用ascii编码
  23. json.dump(dic_obj,fp=fp, ensure_ascii=False)

5.4 爬取豆瓣高分电影分类排行榜

滑动页面时会产生一个get请求

 

  1. import requests
  2. import json
  3. if __name__ == '__main__':
  4. url = 'https://movie.douban.com/j/chart/top_list'
  5. param = {
  6. 'type': '24',
  7. 'interval_id': '100:90',
  8. 'action': '',
  9. 'start': '0', # 从库中第几部电影取
  10. 'limit': '20' # 一次取出的个数
  11. }
  12. # 进行UA伪装
  13. headers = {
  14. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53'
  15. }
  16. response = requests.get(url=url, params=param, headers=headers)
  17. list_data = response.json()
  18. fp = open('./douban.json', 'w', encoding='utf-8')
  19. json.dump(list_data, fp=fp, ensure_ascii=False)
  20. print('over')

注:获取json后可以复制去在线json格式化网站查看json

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/101680
推荐阅读
相关标签
  

闽ICP备14008679号