[Python 爬虫这样学,一定是大拇指拉!] DAY24 - 实战演练:伪装

伪装

伪装!?爬虫还要伪装喔?

是的,不知道各位还记不记得在"关於爬虫"有提到过:

  • 爬虫存取网站的过程会消耗目标系统资源。
  • 不少网路系统并不默许爬虫工作。

因为以上原因,很多网站都会把爬虫拒之门外,就是为了保护自己的 Server。那我们要怎麽让程序像一个浏览器呢?
其实很简单!我们先看这篇在 ithelp 的提问:

关於Python使用requests的爬虫问题

看完文章後,可以知道一般 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 拉!/images/emoticon/emoticon37.gif

所以我们送 Request 前,得要带入像浏览器的 User-agent。
方法有两种:

  1. 直接复制自己浏览器的 User-agent 拿来用。
  2. 使用 fake-useragent 套件:
    可以从 useragentstring.com 抓取最新的 User-Agent 来使用,或是根据现实世界统计的浏览器使用频率来随机产生 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 看看罗。/images/emoticon/emoticon12.gif


<<:  是工程师就自己简化流程,这种热血你我都有吧!?Windows铁人无脑自动发文带出30天最终大结局

>>:  [2021铁人赛 Day24] Forensics 监识学题目 01

JavaScript Day26 - Async、Await

ES7:Async、Await async:async 写在函式前面,表示函式是非同步的,回传值是 ...

Day3-自制网站卷轴(上)_CSS就能做得到

这次要介绍如何「自制假卷轴」 前言// 大学期间有一次网页程序课程的作业需要仿制一个网站 该网站的左...

{DAY 22} Pandas 学习笔记part.8

前言 这篇文章主要会提到资料分组 会继续利用kaggle上的开源资料进行更多的pandas练习 Ka...

Day10 我的工作环境

作业系统 前九天的内容大致上是我在Day1提到的扫盲课程学到的东西,当时我使用的是一台Windows...

[Day30] - 完赛、感想、心得

Day30 - 完赛、感想、心得 心得 坚持 - 坚持阿,哪次不坚持 当初觉得30天应该不难吧,就每...