什么是爬虫:
- 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程。
爬虫的价值:
- 实际应用
- 就业
爬虫究竟是合法还是违法的?
爬虫带来的风险可以体现在如下方面:
如何在使用编写爬虫的过程中避免进入局子
- 时常的优化自己的程序,避免干扰被访问网站的正常运行
- 在使用,传播爬取到的数据时,审查抓取到的内容,如果发现了涉及到用户因此商业机密等敏感内容需要及时停止爬取或传播。
爬虫在使用场景中的分类
爬虫的矛与盾
反爬机制
- 门户网站,可以通过制定相应的策略或者技术手段,防止爬虫程序进行网站数据的爬取。
反反爬策略:
- 爬虫程序可以通过制定相关的策略或者技术手段,破解门户网站中具备的反爬机制,从而可以获取门户网页数据。
robots.txt协议
- 君子协议。规定了网站中哪些数据可以被爬虫爬取哪些数据不可以被爬取。
http协议
概念:就是服务器和客户端进行数据交互的一种形式。
常用请求头信息
- 请求载体的身份标识:User-Agent
- Connection:请求完毕后,是断开连接还是保持连接
常用响应头信息
- Content-Type:服务器响应回客户端的数据类型
https协议:
安全的超文本传输协议
加密方式
- 对称秘钥加密
- 非对称秘钥加密
- 证书秘钥加密
requests模块:
python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高。
作用:模拟浏览器发请求。
如何使用:(requests模块的编码流程)
步骤1:指定url
步骤2:发起请求
步骤3:获取响应数据
步骤4:持久化存储
环境安装:
pip install requests
实战编码1:
需求:爬取搜狗首页的页面数据
#需求:爬取搜狗首页页面数据
from http.client import responsesimport requests
if __name__ == "__main__":#指定urlurl = 'https://www.sogou.com/'#2.发起请求#get方法会返回一个响应对象responses = requests.get(url=url)#3.获取响应数据.txt返回的是字符串形式的响应数据page_text = responses.textprint(page_text)#4.持久化存储with open('./sogou.html','w',encoding = 'utf-8') as fp:fp.write(page_text)print('爬取数据结束!!!')
实战编码2:
需求:破解百度翻译
获取UA
#UA User-Agent(请求整体的身份标识)
#UA监测:门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识为某一款浏览器,表明该请求是一个正常的请求。但是,如果检测到请求的载体身份标识不是基于某一浏览器的,则表明该#请求为不正常的请求(爬虫),则服务器端很可能拒绝本次请求。
#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/131.0.0.0 Safari/537.36 Edg/131.0.0.0'}url = 'https://fanyi.sogou.com/text'#处理url携带的参数:封装到字典中kw = input('enter a word:')param = {'fr' : kw}#对指定的url发起请求,对应的url是携带参数的,并且请求过程中处理了参数response = requests.get(url=url,params = param ,headers = headers )page_text = response.textfileName = kw+'.html'with open(fileName,'w',encoding='utf-8') as fp:fp.write(page_text)print(fileName,'保存成功!!!')
实战编码3:
需求:爬取豆瓣电影分类排行榜 https://movie.douban.com/中的电影详情参数
import requests
import json
if __name__ == "__main__":#1.指定urlurl = 'https://movie.douban.com/typerank'#2.进行UA伪装headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0'}#3.get请求参数处理word = input('输入类型')param = {'type_name':'word','type':'24','interval_id' :'100:90','action' :''}response = requests.get(url = url,params = param ,headers = headers)page_text = response.textfileName = word + '.html'with open(fileName, 'w', encoding='utf-8') as fp:fp.write(page_text)print(fileName, '保存成功!!!')
聚焦爬虫:
爬取页面中指定的页面内容。
编码流程:
- 指定url
- 发起请求
- 获取响应数据
- 数据解析
- 持久化存储
数据解析分类:
- 正则
- bs4----python特有
- xpath(***)
正则数据解析原理概述:
解析的局部的文本内容都会在标签之间或者标签对应的属性中进行存储
- 1.进行指定标签的定位
- 2.标签或者标签对应的属性中存储的数据值进行提取(解析)
import re #加载正则模块
import os #加载创建该模块,可以创建文件夹
bs4进行数据解析
数据解析的原理:
1.标签定位
2.提取标签、标签属性中存储的数据值
bs4数据解析的原理:
1.实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中
2.通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取
pip install bs4 #创建BeautifulSoup对象
pip install lxml #解析器
xpath解析:
最常用且最便捷高效的一种解析方式。通用性。
xpath解析原理:
1.实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中
2.调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获
环境的安装:
pip install lxml
如何实例化一个etree对象:from lxml import etree
1.将本地的html文档中的源码数据加载到etree对象中:etree.parse(filePath)
2.可以将从互联网上获取的源码数据加载到该对象中etree.HTML(‘page_text’)