赞
踩
目录
什么是爬虫?
——指通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程。
爬虫有什么价值?
总的来说爬虫的价值就是:实际应用、就业
爬虫究竟合法还是违法?
——在法律上不被禁止
——具有违法风险
——善意爬虫 恶意爬虫:抢票
带来的风险:
——爬虫干扰了被访问网站的正常运营
——爬虫抓取了受到被法律保护的特定类型的数据或信息
如何在使用编写爬虫的过程中避免进入局子的厄运呢?
——时常优化自己的程序,避免干扰被访问网站的正常运行
——在使用传播爬取到的数据时,审查抓取到的内容,如果发现了涉及到用户隐私商业机密等敏感内容,需要即时停止爬取或传播
爬虫在使用场景中的分类
——通用爬虫:
抓取系统的重要组成部分。抓取的是一整张页面数据
——聚焦爬虫:
建立在通用爬虫的基础上。抓取的是页面中特定的局部内容。
——增量式爬虫:
监测网站中数据更新的情况。只会抓取网站中最新更新出来的数据。
爬虫的矛与盾:
反爬机制:
相关门户网站,可以通过制定相应的策略或技术手段,防止爬虫程序进行网站数据的爬取。
反反爬机制:
爬虫程序可以通过制定相关策略或技术手段,破解门户网站具备的反爬机制,从而可以获取门户网站的信息。
robots.txt协议:
君子协议。规定了网站中哪些数据可以被爬虫爬取哪些不能被爬取。
Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。详细不过多介绍了
- from bs4 import BeautifulSoup
- import bs4
html基本格式:
- <html>
- <head>
- <title>This is a python demo page</title>
- </head>
- <body>
- <p class="title">
- <b>The demo python introduces several python courses.</b>
- </p>
- <p class=“course”>Python is a wonderful general‐purpose programming language.
- You can learn Python from novice to professional by tracking the following courses:
- <a href="http://www.icourse163.org/course/BIT‐268001" class="py1"
- id="link1">Basic Python</a> and
- <a href="http://www.icourse163.org/course/BIT‐1001870001" class="py2"
- id="link2">Advanced Python</a>.
- </p>
- </body>
- </html>
-
- <>…</>构成了所属关系
——urllib模块:古老
——requests模块:简洁高效
什么是requests模块?
python中原生的一款基于网络请求的模块,功能强大,效率极高
作用:模拟浏览器发请求。
如何使用:(requests模块的编码流程)
——指定url
——发起请求
——获取响应数据
——持久化存储
环境安装:
pip install requests
- import requests
-
- if __name__ == '__main__':
- # 指定url
- url = 'http://www.sogou.com/'
- # 发起请求
- # get方法返回一个响应对象
- response = requests.get(url=url)
- # 获取响应数据:text返回的是字符串形式的响应数据:
- page_text = response.text
- print(page_text)
- # 持久化存储
- with open('./sogou.html','w',encoding='utf-8') as fp:
- fp.write(page_text)
- print('爬取数据结束')
UA伪装:让爬对应的请求载体身份标识伪装成某一浏览器
UA:User-Agent(请求载体的身份标识)
1 直接访问 ip地址查询
2.浏览器直接console输入 alert(navigator.userAgent)
门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识为某一浏览器,则说明是一正常请求,但请求的载体身份标识不是基于某一款浏览器的,则这一请求是不正常的请求(爬虫),服务器端可能会拒绝该次请求。所以要进行UA伪装
- import requests
-
- if __name__ == '__main__':
- # UA伪装:将对应的User—Agent封装到一个字典中
- headers = {
- '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'
- }
-
- url = 'https://cn.bing.com/search?'
- # 处理url携带的参数:封装到字典中
- kw = input('enter a word')
- param = {
- 'q': kw
- }
- # 对指定的url发起的请求对应的url是带参数的,并且请求过程中处理了参数
- response = requests.get(url=url, params=param, headers=headers)
-
- page_text = response.text
- fileName = kw+'.html'
- with open(fileName, 'w', encoding='utf-8') as fp:
- fp.write(page_text)
- print('保存成功')
找阿贾克斯(ajax)请求
——对应的请求是post请求,携带了参数
——响应数据是一组json数据
- import requests
- import json
- if __name__ == '__main__':
- # 指定URL
- post_url = 'https://fanyi.baidu.com/sug'
- # 进行UA伪装
- headers = {
- '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'
- }
- # post请求参数处理,同get请求一致
- word = input('enter a word:')
- data = {
- 'kw': word
- }
- # 请求发送
- response = requests.post(url=post_url, data=data, headers=headers)
- # 获取相应数据json() 返回的是一个字典对象(如果确认响应数据是json类型才使用json)
- dic_obj = response.json()
- # 持久化存储
- fileName = word+'.json'
- fp = open(fileName, 'w', encoding='utf-8')
- #中文不能使用ascii编码
- json.dump(dic_obj,fp=fp, ensure_ascii=False)
滑动页面时会产生一个get请求
- import requests
- import json
- if __name__ == '__main__':
- url = 'https://movie.douban.com/j/chart/top_list'
- param = {
- 'type': '24',
- 'interval_id': '100:90',
- 'action': '',
- 'start': '0', # 从库中第几部电影取
- 'limit': '20' # 一次取出的个数
- }
- # 进行UA伪装
- headers = {
- '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'
- }
- response = requests.get(url=url, params=param, headers=headers)
-
- list_data = response.json()
-
- fp = open('./douban.json', 'w', encoding='utf-8')
- json.dump(list_data, fp=fp, ensure_ascii=False)
-
- print('over')
注:获取json后可以复制去在线json格式化网站查看json
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。