Task 3 爬虫学习

3.1 selenium 学习

  • 什么是selenium? 一个web应用测试工具。可以起到模拟用户在游览器的操作。如打开游览器等等。这样可以使得服务端方认为我们是用户在操作。
from selenium import webdriver
from seleniu,.webdriver.common.keys import Keys
###打开游览器
driver - wbedriver.Chrome(".\")
###操作游览器, 主要是查找元素,但主要是靠driver来寻找
element = driver.find_element_by_name("q")
###找到页面后需要交互
element.send_keys("")
element.send_keys(Kes.RETURN)
element.clear() 
###等待页面加载, 一开始某个节点是不存在的,比如一个页面就20个排名,需要点击更多才能显示更多的排名
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:    
    element = WebDriverWait(driver, 10).until(           
        EC.presence_of_element_located((By.ID, "myDynamicElement")))
finally:    
    driver.quit()
driver = webdriver.Firefox()
driver.implicitly_wait(10) # seconds
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element_by_id("myDynami")

3.2 ip代理

作为用户方,我们自然想去互联网上获取我们想要的信息。
但是对于服务端,会面临几种情况:
1. 资源库被别人恶意使用,用作商业用途
2. 导致服务器压力过大,就是简单的ddos攻击

那么服务端就需要识别爬虫:
单个ip 短时间内,大规模增多。长时间,有规律的访问。
多个ip,短时间内大规模访问。长时间,有规律的访问。(这种就比较难以处理)

客户应对的方法:
让服务端认为这是游览器在访问,人工爬取是被允许的,自动爬取是非法的。
如何让别人以为这一次访问是人在访问呢,模拟游览器访问,修改请求头。

如何获取代理ip地址

从该网站获取: https://www.xicidaili.com/
inspect -> 鼠标定位:
要获取的代理IP地址,属于class = "odd"标签的内容:代码如下,获取的代理IP保存在proxy_ip_list列表中

确认代理IP地址有效性
无论是免费还是收费的代理网站,提供的代理IP都未必有效,我们应该验证一下,有效后,再放入我们的代理IP池中,以下通过几种方式:访问网站,得到的返回码是200真正的访问某些网站,获取title等,验证title与预计的相同访问某些可以提供被访问IP的网站,类似于“查询我的IP”的网站,查看返回的IP地址是什么验证返回码

session和cookie

基础知识

  • 静态页面:
    就是纯粹使用html来书写,所有的多媒体内容都是预先写在html里面的。这种编写方式就是加载速度很快,编写简单,访问的时候web容器没有什么压力,等于本地解析。但缺点就是可拓展性非常差,维护性差。
  • 动态页面
    动态网页就是可以根据我们url中不同的参数做不同的事情。比如关联数据库的数据。比如在豆瓣上查找top250资源,就是动态页面。还有登录,下拉等等

http1.0
http1.0是一种无状态链接,也就是说没有记忆功能。最简单的就比如说你每次的登陆,访问行为,并不会在服务器端留下记录。这样的话,比如你登陆过一个网站,你不小心关闭了游览器,再一次访问这个网站,你又得重新登录。事实上,我们在做登录的时候,服务器端会下发一个令牌到客户端,有了这个东西才会保持登录状态

session和cookies
session是会话,发生在服务端,保存了交互信息。cookie是一个身份令牌,保存在客户端。就像你去银行办理业务,柜台给你一个id,说你是aa客户。那么你下次去银行的时候,你就说自己是aa客户,那么过往和银行交互的记录就会被调取出来,继续上次的行为。

再回到爬虫
很多时候,数据需要你登录之后才能被访问。所以我们需要在登陆后获取cookies,在下次访问的时候将cookies放在请求头中,服务端才会认为我们是一个正常登录的用户

客户端发出一个请求,服务端接到这个请求之后,response head中会有一个’set_cookie‘的字段给客户端, 如果登录成功,服务端的会话就开始了,下次请求的时候就保持了这个状态。

如果客户端返回的cookies是无效的,或者不是由这个服务端下发的(一个是cookies瞎写的,一种是别的网站的cookies),或者cookies是已经过期了,那么接下来的请求是不能访问需要登陆后才能访问的页面。

关闭游览器后,再一次打开为什么还能保持登录状态? 一个是cookie持久化,就是有效期更长,然年后保存在本地就可以了。

但还有第二个问题,服务端并不会知道客户端是不是已经结束了会话,那么服务端的会话会无限维持下去,这样是不对的。服务端的会话是会结束的。只要cookies中 有 token,和加密的用户名和密码。如果token在服务端还有效,就直接进入会话。如果token其实在服务端失效了,那么重新解密用户名和密码,确认正确,那么就在服务端重新生成一个会话,token保持。这样的话,就看起来好像是一直在会话中了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值