文章目录
什么是爬虫
信息的交互是通过web网页、或者移动端等不同的客户端端形式进行交互,这个过程是一个人与网路正常的交互行为。而爬虫可以用来模拟人的一些行为去获取相应的数据,即模拟客户端发送网络请求,接收响应数据然后按照一定规则处理数据,这样自动化的抓取网络信息的程序被叫做网络爬虫 (又被称为网页蜘蛛、网络机器人)。
来自维基百科的解释:爬虫
爬虫的工作原理
**1. 发起请求:**向目标网站发送HTTP或HTTPS请求。
**2. 获取响应:**接收服务器返回的响应数据,通常是HTML、JSON或XML格式。
**3. 解析数据:**使用正则表达式、BeautifulSoup、lxml等工具解析响应内容,提取有用信息。
**4. 存储数据:**将提取的数据保存到本地文件、数据库或云存储中。
用途
现在互联网的发展,网络上的数据海量已经无法形容,这些数据离我们也越来越近,将某些领域的数据通过提取处理然后通过大数据分析,人工智能处理或许很有价值。而如今大模型的火爆也家喻户晓了,而大模型的数据该如何来?爬虫就是其中重要的一环。
这里多说一点,AI当前的发展,目前大厂在卷模型,大模型的训练确实也不是普通人可以去做的事情,但是另外两点模型数据的输入和模型的应用这两块还需要很多的创新,也有很多的机会。所以从爬虫出发,获取到数据,可以训练自己的垂直领域的小模型,然后输出一些应用,其实价值很大
- 搜索引擎的搜索数据
- AI人工智能等模型数据的输入
- 数据采集分析
- 抢票
- 商品价格记录等
除了这些,还有很多用途,覆盖在各个领域方方面面。
搜索引擎爬虫
这一段摘自维基百科: https://zh.wikipedia.org/wiki/網路爬蟲
网络搜索引擎等站点通过爬虫软件更新自身的网站内容或其对其他网站的索引。网络爬虫可以将自己所访问的页面保存下来,以便搜索引擎事后生成索引供用户搜索。
网络爬虫始于一张被称作种子的统一资源地址(URL)列表。当网络爬虫访问这些统一资源定位器时,它们会甄别出页面上所有的超链接,并将它们写入一张"待访列表",即所谓爬行疆域。此疆域上的URL将会被按照一套策略循环来访问。如果爬虫在执行的过程中复制归档和保存网站上的信息,这些档案通常储存,使他们可以较容易的被查看。阅读和浏览他们存储的网站上并即时更新的信息,这些被存储的网页又被称为"快照"。越大容量的网页意味着网络爬虫只能在给予的时间内下载越少部分的网页,所以要优先考虑其下载。高变化率意味着网页可能已经被更新或者被取代。一些服务器端软件生成的URL(统一资源定位符)也使得网络爬虫很难避免检索到重复内容。
但是互联网的资源卷帙浩繁,这也意味着网络爬虫只能在一定时间内下载有限数量的网页,因此它需要衡量优先级的下载方式。有时候网页出现、更新和消失的速度很快,也就是说网络爬虫下载的网页在几秒后就已经被修改或甚至删除了。这些都是网络爬虫设计师们所面临的两个问题。
再者,服务器端软件所生成的统一资源地址数量庞大,以致网络爬虫难免也会采集到重复的内容。根据超文本传输协议,无尽组合的参数所返回的页面中,只有很少一部分确实传回正确的内容。例如:数张快照陈列室的网站,可能通过几个参数,让用户选择相关快照:其一是通过四种方法对快照排序,其二是关于快照分辨率的的三种选择,其三是两种文件格式,另加一个用户可否提供内容的选择,这样对于同样的结果会有48种(432)不同的统一资源地址与其关联。这种数学组合替网络爬虫造成了麻烦,因为它们必须越过这些无关脚本变化的组合,寻找不重复的内容。
维基百科这段很好的解释了爬虫的一个大概的原理,当然除了搜索引擎这种通用的网络爬虫,更多的爬虫是针对某些特定网站进行数据收集的爬虫,而这些聚焦爬虫,我们使用到会更多一点。
Robots协议
爬虫相比于人,可以有更快的检索速度和更深的层次,所以,他们可能使一个站点瘫痪。不需要说一个单独的爬虫一秒钟要执行多条请求,下载大的文件。一个服务器也会很难响应多线程爬虫的请求。 就像Koster所注意的那样,爬虫的使用对很多工作都是很有用的,但是对一般的社区,也需要付出代价。使用爬虫的代价包括:
- 网络资源:在很长一段时间,爬虫使用相当的带宽高度并行地工作。
- 服务器超载:尤其是对给定服务器的访问过高时。
- 质量糟糕的爬虫,可能导致服务器或者路由器瘫痪,或者会尝试下载自己无法处理的页面。
- 个人爬虫,如果过多的人使用,可能导致网络或者服务器阻塞。
对这些问题的局部解决方法是漫游器排除协议(Robots exclusion protocol),也被称为robots.txt议定书[10],这份协议是让管理员指明网络服务器的不应该爬取的约定。这个标准没有包括重新访问一台服务器的间隔的建议,虽然设置访问间隔是避免服务器超载的最有效办法。最近的商业搜索引擎,如Google,Ask Jeeves,MSN和Yahoo可以在robots.txt中使用一个额外的 "Crawl-delay"参数来指明请求之间的延迟。
HTTP的请求过程
浏览器看到的网页页面是通过请求js、css等样式内容渲染出来的结果,但是在爬虫中,爬虫只会请求url地址,不会进行js和css内容的请求和加载,所以爬虫请求的页面和浏览器渲染出来的结果其实是不一样的。
还有一种是你可以直接拿到服务端的接口,可以直接请求接口,返回的数据一般是json,这样可以直接拿到原始数据的爬虫程序就简单一点,但是授权那块可能会比较麻烦一点。
URL的含义
url 的形式:scheme://host [:port#]/path/.../[?query-string][#anchor]
- scheme:协议 (例如:http, https, ftp)
- host:服务器的 IP 地址或者域名
- port:服务器的端口(如果是走协议默认端口,80 or 443)
- path:访问资源的路径
- query-string:参数,发送给 http 服务器的数据
- anchor:锚(跳转到网页的指定锚点位置)
HTTP常见请求头
很多网站为了禁止爬虫做了很多反爬措施,所以爬虫要完全模仿浏览器的行为才不会被那么轻松的检测出来,首先第一步要模仿的是浏览器发起HTTP请求的请求头:
- User-Agent:标识客户端的类型、操作系统、浏览器及其版本等信息。伪装成浏览器发送请求,避免被简单的反爬机制阻挡。这里使用了 Chrome 浏览器的 User-Agent 字符串。
- Accept:告诉服务器客户端能够处理的内容类型。
- Accept-Language:指定客户端希望接收的语言。
- Accept-Encoding:指定客户端能够处理的内容编码(通常包括 gzip、deflate 等)。
- Connection:控制连接的管理,例如 keep-alive 以保持连接。
- Referer:表示从哪个 URL 跳转到当前请求的 URL,某些网站会根据这个来判断请求的合法性。
- Cookies:包含之前从服务器收到的 cookies,如果有登录操作或需要会话管理,可以带上相关的 cookies。
python
import requests
# 定义请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.5',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Referer': 'https://www.example.com',
'Upgrade-Insecure-Requests': '1',
# 如果需要,可以添加其他头,例如 Cookie
# 'Cookie': 'your_cookie_here'
}
# 发送 HTTP GET 请求
url = 'https://www.example.com'
response = requests.get(url, headers=headers)
# 打印响应内容
print(response.text)
爬虫常用的技术
- Pyhton基础知识
- urllib库的使用
- 正则表达式的用法
- BeautifulSoup的使用
- 爬虫框架Scrapy的使用
以上这些知识会在后面陆续更新。