python爬虫--小白篇【反反爬】
目录
一、基本概念
- 爬虫:这是一种自动化的程序,用于从互联网上抓取网页内容,提取所需数据。它可以模拟浏览器行为,按照一定的规则访问网站,获取网页的HTML代码,然后解析出有用的信息。爬虫广泛应用于数据收集、信息聚合、研究分析等领域。
- 反爬:这是指网站为了保护其数据不被爬虫非法获取,采取的一系列技术措施。这些措施包括但不限于:限制IP访问频率、检查请求头信息、使用验证码、动态加载内容、设置Cookies策略等。反爬的目的是减少或阻止爬虫对网站资源的访问,保护网站的数据安全和服务器性能。
- 反反爬:这是指爬虫开发者为了绕过网站的反爬虫措施,采取的一系列技术手段。这些手段可能包括:使用代理IP池来绕过IP限制、模拟正常用户的浏览器行为、解析和执行JavaScript以获取动态加载的内容、使用浏览器自动化工具(如Selenium)来模拟真实用户操作等。反反爬的目的是使爬虫能够继续从采取了反爬措施的网站中获取数据。
二、具体操作
2.1、添加请求头
请求头(Request Headers)是在HTTP协议中用于传递关于请求的额外信息的部分。它包含了客户端(通常是浏览器或应用程序)与服务器之间进行通信所需的元数据。请求头的作用包括传递请求的附加信息、控制缓存行为、进行身份验证、控制请求体的格式以及提供跳转来源信息等。前期的爬虫项目中已经使用过了user-agent,具体内容可以看本专栏其他爬虫文章。
"""
@Author :江上挽风&sty
@Blog(个人博客地址):https://blog.csdn.net/weixin_56097064
@File :请求头
@Time :2024/12/9 10:22
@Motto:一直努力,一直奋进,保持平常心
"""
# 安装requests包
import requests
url = "https://www.baidu.com/"
header = {
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"
}
requests = requests.get(url, headers=header) # 通过headers=agent处理反爬,在浏览器中输入数据通常是使用get方式
print(requests.text) # 拿到页面源代码
requests.close()
仅使用单个或者几个固定的user-agent,也容易被服务器判定为自动化爬虫程序,为了随机生成user-agent,我们可以引入fake-useragent库。这是一个Python库,用于生成随机的用户代理(User-Agent)字符串。User-Agent是HTTP请求头的一部分,用于识别发送请求的客户端应用程序或浏览器。通过设置随机用户代理,可以增加爬虫的随机性和隐蔽性,避免被网站识别为爬虫程序,从而提高爬虫的成功率。fake-useragent库可以自动生成UserAgent值,避免了爬虫开发中重复的复制粘贴工作。使用fake-useragent库可以避免被网站封禁或识别为爬虫,通过随机生成user-agent,增加了爬虫的随机性和隐蔽性。
安装fake-useragent第三方python库:
pip install fake-useragent
实例演示:
"""
@Author :江上挽风&sty
@Blog(个人博客地址):https://blog.csdn.net/weixin_56097064
@File :请求头
@Time :2024/12/9 10:22
@Motto:一直努力,一直奋进,保持平常心
"""
# 安装requests包
import requests
from fake_useragent import UserAgent
url = "https://www.baidu.com/"
# 实例化UserAgent
agent = UserAgent()
# 随机从useragent池中获取一个useragent
user_agent = agent.random
# 查看useragent
print(user_agent)
header = {"user-agent": user_agent}
# 通过headers=agent处理反爬,在浏览器中输入数据通常是使用get方式
requests = requests.get(url, headers=header)
# 拿到页面源代码
print(requests.text)
# 关闭服务其请求
requests.close()
2.2、IP代理
当服务器获取到单个IP地址大量的数据请求时,服务器会认为该IP地址存在恶意,会将恶意IP地址进行封禁,从而断开服务器请求连接。使用IP代理就是绕过本机IP直接访问服务器的过程,转而先方位代理IP,然后通过代理IP去向服务器发送数据请求。如果一个代理IP被封禁,可以轻松切换到另一个代理IP继续爬取数据,而不需要更换整个网络环境,还可以通过并行使用多个代理IP,可以同时从多个点对目标网站进行数据爬取,提高数据收集的效率。
案例演示:(可以将案例中的ip替换为自己的代理ip)
"""
@Author :江上挽风&sty
@Blog(个人博客地址):https://blog.csdn.net/weixin_56097064
@File :ip代理
@Time :2024/12/9 10:53
@Motto:一直努力,一直奋进,保持平常心
"""
import requests
proxies = {
# 访问的链接是http还是https,根据具体链接来指定。此外还要保证代理的ip地址和port是可用的
"https": "https://218.60.8.83:3129",
"http": "http://218.60.8.83:3129"
}
resp = requests.get("https://www.baidu.com/", proxies=proxies)
resp.encoding = "utf-8"
print(resp.text)
2.3、使用cookie
在爬取某些网页数据时,需要用户进行登入操作,但通过模拟登入操作较为复杂,这会造成爬虫效率低效。为了绕过登入操作,我们可以获取登入账号后的cookie到本地(该操作可以手动u也可以模拟),然后读取下载的cookie文件并使用该cookie加载到浏览器中再刷新即可。
演示案例:
"""
@Author :江上挽风&sty
@Blog(个人博客地址):https://blog.csdn.net/weixin_56097064
@File :cookie登入
@Time :2024/12/9 11:11
@Motto:一直努力,一直奋进,保持平常心
"""
import requests
url = "https://www.bilibili.com/"
# 通过headers=agent处理反爬,在浏览器中输入数据通常是使用get方式
cookie = {
"cookie": "对应网页登入后的cookie"
}
requests = requests.get(url, cookies=cookie)
# 拿到页面源代码
print(requests.text)
# 关闭服务其请求
requests.close()
查看cookie:
三、总结
本文主要是记录了爬虫过程中的三种反反爬方法,主要是添加user-agent、使用ip代理、使用cookie。user-agent可以使用python第三方库fake-useragent随机获取,ip代理可以在网上找免费的或者付费的ip代理(可参考快代理 - 企业级HTTP代理IP云服务_专注IP代理11年),cookie可以自己登入账号后获取也可以写程序通过模拟登入后通过get_cookies()获得并保存为文件,之后在读取文件获取该cookie继续登入。本博客主要是自学记录过程,如有不足之处,请大家批评指教。欢迎大家评论留言哦!
原文地址:https://blog.csdn.net/weixin_56097064/article/details/144339734
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!