备战春招难免会无趣和煎熬,因此,突然发现了爬虫这么乐趣的事情,一番探究之后,发现这是多么美妙的事情啊~
自动化脚本 yyds~
言归正传,
之前使用过爬虫,不过用的是 Java 的,当时做一个电商项目,用 Jsoup
快速的爬取某东的商品数据存到 es 中,后来迎接双11,某东在中间加了个验证重定向,这就导致 Jsoup
基本失效,因而认识了 HtmlUnit
,实现了模拟操作浏览器,成功地获取到了数据;
之后就是用 Jsoup
和 HtmlUnit
结合写了几个自动化脚本,香香的~,就是挂服务器上,要占用的运行内存不小;
所以转到了 py 的 request
,啊,这是真的香,不仅运行方便,内存占用也就五分之一左右,用了 request
怎么能不用 selenium
呢,下面为您揭晓 selenium
的妙用;
Selenium 是一个用于 Web 应用程序测试的工具。Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括 IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge 等。
这个工具的主要功能包括:
Selenium 测试直接在浏览器中运行,就像真实用户所做的一样。Selenium测试可以在 Windows、Linux 和 Macintosh 上的 Internet Explorer、Chrome 和 Firefox 中运行。
首先我们要清楚,为什么要使用 selenium
?
为了防止网络爬虫,加大网络爬虫的难度,很多网站将接口地址做了处理,它们更多的具有这些特点:既冗长又复杂,经过加密,具有时效性,毫无规律可言。
selenium 可以使用模拟浏览器运行的方式,它可以做到在浏览器中看到的是什么样,抓取的源码就是什么样,即可见即可爬。再也不用管网页内容是使用了JavaScrapt还是Ajax, 也不用管接口有多复杂了(其实连接口是什么都不用管)。
这里用的编程语言是 Python,因此,只要安装 py 中的 selenium 库就好了,
pip install selenium
运行 selenium 打开浏览器是需要下载安装浏览器驱动程序的,火狐中有集成好的插件,直接搜索安装即可,下面是以 Google Chrome 为例;
我的 Google Chrome 的版本号是 96.0.4664.110
,但是这里并没有相对应的版本号,我把略高和略低版本的驱动程序都尝试了一下,发现略低的是可以的,即下载 96.0.4664.45
; 下载完之后,放在本地的 py 根目录下,
运行下述代码,测试一下之前的安装是否成功,
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://blog.csdn.net/weixin_46263782")
Selenium IDE 是一个火狐插件(现在谷歌也有),可以帮助刚入门的自动化测试供测试,在脚本语言不太熟练的情况下,可以通过Selenium IDE实现脚本的录制、开发、回放。
这个东西对萌新真的太友好了,只要自己操作录制一遍,基本能百分百还原,而且还能够导出成编程语言,稍作修改就能使用,真的是很方便,强推!
这里以谷歌为例,点进设置,选择扩展程序,搜索一下 Selenium IDE,我这已经是安装好了,
使用的时候点击右上角,
会弹出如下界面:
第一次的话就选择新建一个项目,然后跟着步骤走就好了;
这是我自己之前写的一个自动化脚本,先是通过录制,然后自己根据实际情况稍作修改,至于干什么的,懂得都懂;
只能说这东西真的太香了;
既然学了理论,自然要进行实践来巩固和加深印象了,毕竟实践是检验真理性的唯一标准嘛,
最近喜欢关注国家大事,然后就发现这 60秒读懂世界 就很不错,先是看了看公众号,不过没有搞到链接,在网上搜了一下,发现有一家应该是爬了那个公众号,然后我就借机爬了那个网站,嘿嘿,在通过 bot 每天定时发给自己,美滋滋😃
不过我是用 requests
完成的,先上源码,然后再上转换成 selenium 之后的代码;
import requests
import urllib.request
from pyquery import PyQuery as pq
url = 'https://www.rjdq8.com/?c=index&m=infos&last_cate_id=7'
doc = pq(requests.get(url, headers = headers).text)
next_url = str(doc('.news-top-detail').find('a').attr('href'))
next_doc = pq(requests.get(next_url, headers = headers).text)
png_url = 'https://www.rjdq8.com/' + str(next_doc('.all-detail-item-content').find('img').attr('src'))
request = urllib.request.Request(png_url, headers = headers)
response = urllib.request.urlopen(request)
fp = open("day_60s.png", "wb")
fp.write(response.read())
fp.close()
大致示意一下就是下面这样:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
url = 'https://www.rjdq8.com/?c=index&m=infos&last_cate_id=7'
driver = webdriver.Chrome()
driver.get(url)
next_url = driver.find_element(By.CLASS_NAME, 'news-top-detail').find_element(By.TAG_NAME, 'a').get_attribute('href')
time.sleep(2)
driver.get(next_url)
png_url = driver.find_element(By.CLASS_NAME, 'all-detail-item-content').find_element(By.TAG_NAME, 'img').get_attribute('src')
driver.quit()
一般用到 selenium 的都会有登录注册这种要填充文本框的环节,最优的选择当然是直接塞 cookie,那真要注册登录了该怎么办呢;
一般注册登录的文本框就是 input
,然后还有一个按钮,基本都是这样,那代码就如下:
driver.get(url)
time.sleep(1)
# 登录
driver.find_element(By.NAME, 'UserText').send_keys(userId)
time.sleep(0.2)
driver.find_element(By.NAME, 'PasswordText').send_keys(password)
time.sleep(0.2)
driver.find_element(By.CLASS_NAME, 'btn-login').click()
time.sleep(1)
想必用到 selenium 的读者都应该多少听过或者用过代理了,那这里为什么要特意提及代理呢,因为有些读者可能只知道要用代理,但却不明白代理也是分等级的,下面来一一介绍:
代理主要分为三种:透明代理,匿名代理,高级匿名代理;
什么是透明代理?
透明代理是另一种类型的 HTTP 代理,它们不会修改通过它们发送的请求。您的 IP 地址和其他可能链接到您和您设备的信息将发送到该网站。
它们允许请求通过它们,或者在某些条件不满足时拒绝访问。由于它们不会修改您的请求并且不会通知您它们的存在,因此您无法分辨它们是否存在,除非您进行了测试。
但是,然而,它们既可能对你有益,也可能成为你担忧的来源,并最终决定你的上网体验。
透明代理是如何工作的?
透明代理与任何其他类型的代理一样:它们是中介,发送到 Web 服务器的请求在到达预期的 Web 服务器之前会通过它们。将它们策略性地放置在中间,并通过它们路由请求。与需要配置匿名代理才能工作的匿名代理不同,透明代理从头开始就不需要进行配置,这就是为什么大多数人不了解它们的原因。
REMOTE_ADDR = 代理 IP 地址
HTTP_VIA = 代理 IP 地址
HTTP_X_FORWARDED_FOR = 您的 IP 地址
因此,当您使用透明代理时,网站所有者知道您使用的是 HTTP_VIA
代理,同时也知道您的真实 IP!
通过透明代理发送请求时,请求将会被拦截,并修改 REMOTE_ADDR
标头,并用代理服务器的 IP 地址填充,告知网站该请求已通过。HTTP_X_FORWARDED_FOR
标头将携带您的 IP 地址,并且启用了 HTTP_VIA
,使网站知道请求来自您,并通过代理服务器传递。
它们通常由 Internet 服务提供商和您使用其 WiFi 的组织进行配置。代理可以访问您的请求数据,并且可以出于恶意目的对其进行修改。它成为一种称为 “中间人攻击” 的网络攻击。然而,在大多数情况下,没有恶意活动被执行,您将被审查和内容过滤,其中一些甚至是有用的。
透明代理用例
什么是匿名代理?
匿名代理是 Internet 用户中最流行的代理类型。它们是不透明的,可以通过更改您的 IP 地址来更改请求数据。这使得您访问的网站很难知道您是发起请求的网站。
将 IP 地址更改为一个全新的 IP 地址,这就是使它匿名的原因。但是,他们将自己标识为代理。这是通过修改 REMOTE_ADDR
,HTTP_X_FORWARDED_FOR
和 HTTP_VIA
来完成的。
REMOTE_ADDR = 代理 IP 地址
HTTP_VIA = 代理 IP 地址
HTTP_X_FORWARDED_FOR = 代理 IP 地址
因此,当您使用匿名代理时,网站所有者知道您使用的是 HTTP_VIA
代理,但无法知道您的真实 IP。
匿名代理如何工作的?
如果不配置代理,发送的 Web 请求将直接发送到预期的 Web 服务器。匿名代理要求您对其进行配置,然后才能使用它们,尽管您的办公室可以决定根据您的行为对其进行配置。
如果您打算在非浏览器环境(例如 SEO 工具或某种类型的 bot)中使用它们,则必须学习如何在此类工具上进行配置。
配置后,您的 Web 请求所遵循的路由将发生变化。代理服务器将位于您的计算机浏览器和 Internet 之间。当您发出 Web 请求时,您将被重定向到代理服务器,而不是直接进入要访问的站点的请求。到达代理服务器后,您的请求标头将被修改,正是这种修改使它成为匿名的。
HTTP 代理修改 HTTP_X_FORWARDED_FOR
和 REMOTE_ADDR
标头,剥离您的 IP 地址,并用其自己的 IP 地址填充它。此后,请求将发送到网站,因为发送了 HTTP_VIA
标头,所以网站将知道已使用代理,但不会看到您的 IP 地址。发送响应后,它不会直接发送给您,而是发送给代理服务器,然后代理服务器将请求转发回给您。
但是,您需要知道,尽管您对使用代理访问的网站是匿名的,但对于您使用的代理却永远都不是匿名的。虽然许多网站声称不会跟踪用户的浏览活动,并严格执行无日志策略,但有些网站会在必要时给你发邮件,对,有些网站实际上会保留日志,即使他们告诉您不会这样做。这就是为什么您应该使用高级代理服务器,这些代理服务器位于不强迫其业务披露其客户信息的区域。
匿名代理用例
匿名代理具有广泛的应用。如果您是一个经常使用 Internet 的用户,您可能真的不需要它们,但是如果您想保持匿名,或者您正在进行 web 自动化,没有代理,那么您就几乎无能为力了。
以下是匿名代理的主要用途:
什么是高级匿名代理?
高匿名代理是一种 HTTP 代理,它是匿名的,可以将安全性和隐私性提高到一个全新的水平。与在匿名代理中将您的 IP 地址隐藏但将自己标识为代理的情况不同,高级匿名代理不会将自己标识为代理,而是将您的 IP 地址隐藏并提供给客户端。
当您仅可以使用匿名代理时,您可能会问为什么要使用高级匿名代理。事实是,许多网站默认情况下会阻止匿名代理。通过使用高匿名代理,您可以逃避代理检查。当您获得访问请求资源的权限时,其中的关键是 HTTP 标头。
高级匿名代理如何工作的?
高级匿名代理的工作原理与所有匿名代理相同,它们充当您的 Web 请求通过其发送的中介服务器。当请求到达它时,您的请求将被修改,剥离您的 IP 地址并用一个完全不同的 IP 地址替换它,这样您请求内容的 Web 服务器将不会知道您在请求的背后。
但是,与将自己标识为代理的匿名代理不同,高匿名代理不会将自己标识为代理,代理如何识别和不识别 Web 服务器的自身?有3个 HTTP 标头供代理服务器使用,以便网站知道发送给它们的请求是否通过代理服务器路由。这3个标头包括 HTTP_VIA
,HTTP_X_FORWARDED_FOR
和 REMOTE_ADDR
。
REMOTE_ADDR = 代理 IP 地址
HTTP_VIA = 未确定(空白)
HTTP_X_FORWARDED_FOR = 未确定(空白)
因此,当您使用高级匿名代理(也称为精英代理)时,网站所有者无法检测到您在使用高匿名代理。
当 Web 服务器接收到请求时,它将查看这3个标头的内容以了解如何响应该请求,其中包含 IP 地址,这些 IP 地址充当 Internet 上的计算机标识符并用于位置标识。对于高级匿名代理,HTTP_VIA
和 HTTP_X_FORWARDED_FOR
中不包含任何信息。HTTP_VIA
旨在使网站知道请求已通过代理进行路由,而 HTTP_X_FORWARDED_FOR
则用于首先发起请求的 IP 地址。
由于这两个为空白,因此服务器无法知道请求已通过代理路由。为此,将修改 REMOTE_ADDR
并指定其他 IP 地址。这使您更加安全,并隐藏了您的在线身份(IP地址),您将被视为普通用户。
高级匿名代理用例
高匿名代理可用于您可使用匿名代理进行的所有操作。
它们的应用领域很多。常规的 Internet 用户使用它们来逃避审查并访问 Internet 上受限制的内容和本地内容,而 Internet 营销人员和研究人员将它们用于其他用途。
组织将它们用于品牌保护。在 SEO 以及 web 抓取和爬虫中已广泛使用。
代理这东西还是很有必要的,其实可以在 httpbin.org/ip 这个网站测试一下的,透明代理的话就会把你自己的 ip 以及代理 ip 显示在上面了;
极光会有的,并肩于雪山之巅!