伪装!?爬虫还要伪装喔?
是的,不知道各位还记不记得在"关於爬虫"有提到过:
爬虫存取网站的过程会消耗目标系统资源。
不少网路系统并不默许爬虫工作。
因为以上原因,很多网站都会把爬虫拒之门外,就是为了保护自己的 Server。那我们要怎麽让程序像一个浏览器呢?
其实很简单!我们先看这篇在 ithelp 的提问:
看完文章後,可以知道一般 HTTP Method 为 Get 且不用特别登入的网站,被挡下来的话,问题通常是出在 Headers 中的 User-Agent。而 User-Agent 就是用来告诉 Server,连线过来的 Client 是什麽浏览器、OS 等。
那为什麽 Python 会被挡掉?我们来检查一下 Python 的预设 Header 是什麽。
import requests
res = requests.get("https://www.google.com/")
print(res.request.headers)
# {'User-Agent': 'python-requests/2.25.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
预设的 User-Agent 是 python-requests/2.25.1,直接不演的告诉 Server 我们是 Python 拉!
所以我们送 Request 前,得要带入像浏览器的 User-agent。
方法有两种:
from fake_useragent import UserAgent
ua = UserAgent()
# 不同浏览器的 User-Agent
ua.ie
ue.google
ua.firefox
ua.safari
# 随机产生
ua.random
套用到程序的 Header 中:
import requests
from fake_useragent import UserAgent
ua = UserAgent()
res = requests.get("https://www.google.com/", headers={
"User-Agent": ua.random
})
以上就是基本的爬虫伪装。
再进阶一点的可能就是要自己做 cookie 之类的,会稍微复杂一点点,但概念跟 Headers 类似,由於本系列是以基础为主,所以这边就先不讨论了,有兴趣的读者可以自己 google 看看罗。
<<: 是工程师就自己简化流程,这种热血你我都有吧!?Windows铁人无脑自动发文带出30天最终大结局
>>: [2021铁人赛 Day24] Forensics 监识学题目 01
ES7:Async、Await async:async 写在函式前面,表示函式是非同步的,回传值是 ...
这次要介绍如何「自制假卷轴」 前言// 大学期间有一次网页程序课程的作业需要仿制一个网站 该网站的左...
前言 这篇文章主要会提到资料分组 会继续利用kaggle上的开源资料进行更多的pandas练习 Ka...
作业系统 前九天的内容大致上是我在Day1提到的扫盲课程学到的东西,当时我使用的是一台Windows...
Day30 - 完赛、感想、心得 心得 坚持 - 坚持阿,哪次不坚持 当初觉得30天应该不难吧,就每...