初识爬虫
爬虫的概念
什么是爬虫
爬虫
:通过编写程序,模拟浏览器上网,并抓取有价值的数据的过程
反爬虫
:门户网站通过制定相应的策略或技术手段,来阻止爬虫程序对其网站数据的爬取
反反爬
:爬虫程序可以采用一些技术手段,来绕过或破坏门户网站的反爬机制,从而爬取到有用的数据
爬虫与反爬虫就是一对矛与盾
爬虫合法性探究
爬虫可能带来的风险?
- 爬虫干扰了被访问网站的正常运营
- 爬虫抓取了受到法律保护的特定类型的数据或信息
如何合理地使用爬虫?
- 对爬虫程序进行优化,避免干扰网站的正常运行
- 不要爬取涉及商业机密等敏感信息
爬虫的君子协议
通常,网站的robots.txt
文件中声明了那些数据可以被爬取,那些数据不可以被爬取(非强制性)
爬虫的分类
在不同的使用场景下,爬虫的分类有
-
通用爬虫
:抓取一整张页面的数据(很可能包含大量无用信息) -
聚焦爬虫
:抓取页面中特定的局部内容,必须建立在通用爬虫的基础之上 -
增量爬虫
:只会爬取网站中最新更新的数据
网络请求与响应
http协议
http(s)协议是服务器和客户端进行数据交互的一种形式,服务器和客户端都需要遵守该协议才能进行数据交互
https协议是http协议的升级版,服务器与客户端的数据交互是通过证书加密的,攻击者很难获得有价值的信息
常用的请求头信息
Request Header | 描述 |
---|---|
User-Agent | 请求载体的身份标识 |
Connection | 请求完毕后,保持连接还是断开连接 |
常用的响应头信息
Response Header | 描述 |
---|---|
Content-Type | 服务器响应数据的类型 |
requests模块
requests
是python中的一个基于网络请求的模块,用来模拟浏览器发送请求。
requests模块的安装与使用
pip install requests
import requests
url = 'http://www.baidu.com'
resp = requests.get(url) #发起一个get请求,并获得响应数据
page_content = resp.text
print(page_content)
属性 | 描述 |
---|---|
resp.text | 以字符串形式返回,通常是页面的html源代码 |
resp.content | 以二进制形式返回,比如一张图片、一个音频 |
resp.json() | 返回一个字典对象(当响应数据是json类型时使用) |
基于requests的简易网页采集器(使用到了UA伪装)
import requests
# 1. 准备数据
# url = 'https://www.sogou.com/web?query=猫羽雫'
url = 'https://www.sogou.com/web'
word = input('Enter a word:')
params = { #请求参数,拼接在url后
'query': word
}
headers = { #请求头,伪装成浏览器
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}
# 2. 发起请求
resp = requests.get(url,params,headers=headers)
resp.encoding = resp.apparent_encoding
page_content = resp.text
print(page_content)
# 3. 持久化存储
file_name = word + '.html'
with open(file_name,'w',encoding='utf-8') as fp:
fp.write(page_content)
print(file_name,'保存成功!')
数据解析
数据解析
是在得到整个网页源代码后,对其中的有用信息进行提取的过程。属于聚焦爬虫
数据解析的一般步骤
检查网页源代码发现,有价值的数据一般存放在标签中,或者标签的属性中。所以数据解析的一般步骤是:1.获取网页源代码 2.标签定位 3.解析数据
F12检查元素中的数据不一定在页面源代码中,也有可能是通过ajax动态刷新的数据,这是我们在数据解析时需要注意的。数据解析要以页面源代码为准!
Python中数据解析的三种方式
1.正则表达式(通用) 2.BeautifulSoup4(python独有) 3.xpath(推荐,通用性最强)
使用正则表达式
建议先把要提取的那部分源码单独复制,对照着去写正则表达式(F12太乱了
标签:xpath,Python,标签,resp,爬虫,content,url,详解,page From: https://www.cnblogs.com/wyun521/p/17092648.html