lxinghua

博客园 首页 新随笔 联系 订阅 管理

一、调试模式介绍

调试模式,即进入网页页面半代码模式,查看网页与代码一一对应关系。鼠标右键,再出现选项中找到检查进入调试模式,或者按键盘上的F12键进入调试模式。

功能介绍:

 

elements:点击这个功能后出现的是当前页面的html文件,在你想实时修改的那个元素出双击,可以暂时修改,不过并没有同步到后台;

console:控制台,用来打印错误信息和你在后台写的console.log(“显示信息”)

source:资源管理功能,用于调试js文件,这里要说明的一点是,在右侧找不到你想调试的js文件时,可以在后台写“debugger”进入到这个js文件后可以在右侧单击打断点,想调哪里就哪里;

network:网络功能,用于查看相关的ajax请求,详情参考上图所示。

二、Cookie

cookie的用处

当客户端和服务器通过三次握手四次挥手建立起稳定连接之后,这个时候它们之间进行数据相互还会携带一个cookie参数。这个参数包含着诸如账号、密码以及一些偏好设置,一边提供个性化的内容。

当然cookie也是有 有效期的,超过有效期cookie将会清除作废,所以在编写一个cookie爬虫代码的时候,并不是一次编写永久运行。每隔一段时间段就需要更新cookie。

cookie的应用

什么时候使用cookie?

1. 当模拟登录不好编写时(结构复杂,有加密);

2. 只有cookie没有账号密码;

3. 网站根据cookie对用户进行推荐,专门爬取某人的个人推荐时。

在代码中利用cookies?

1. 将cookie写入headers中;

2. 使用get方法中的cookies参数进行传递  注意:参数必须为字典类型;

注意事项:

1. 自定义headers中的cookie,后面没有s(非cookies);

2. get方法中的cookies参数  cookies后面有s;

3. cookie一定是键值对存在的。

会话保持

1. 为什么要进行会话保持?

在requests.post请求中,去登录一个网站,会携带用户名和密码等信息。得到的response响应中,得到了cookie。但是这个时候如果我们成功登录进去了网页,想要打开网页的其他部分,会发现访问失败了。因为每一个requests请求,都是新打开一个浏览器去进行访问的,那我们不肯能去做每一个请求都要去登录一下怎么办? 就需要用到保持会话的功能了,我们可以只登录一次,然后保持这种状态去做其他的或者更多的请求。

2. requests.session() 会话保持!

说白了,就是比如你使用session成功登录了某个网站,则在再次使用该session对象请求该网站的其他网页默认使用该session之前使用的cookie等参数

3. 在什么时候进行使用?

1. 需要爬虫保持登录状态;

2. 爬虫需要携带一些特定的参数。比如购物网站的无登录状态下的推荐,主要是cookie。

模拟登录---使用requests

import requests
from requests.utils import dict_from_cookiejar   # cookiejar对象转字典
url = "https://www.xxsy.net/LoginNew/dologin" 
book_url = "https://www.xxsy.net/control?t=1"  # 书架url,如果没有登录进去是访问不了书架的
headers = {
     “user-agent”: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"      
}

# 账号密码
data = {
    "username": "18986145549"
    "password": "dongli123456"
}

# 发起一个post请求
response1 = requests.post(url, headers=headers, data=data)

# 通过往get请求里面传cookie访问书架页面
response2 = requests.get(book_url, headers=headers, cookies=dict_from_cookiejar(response1.cookies))
print(response2.text)

 模拟登录---使用session

import requests
from requests.utils import dict_from_cookiejar   # cookiejar对象转字典
url = "https://www.xxsy.net/LoginNew/dologin" 
book_url = "https://www.xxsy.net/control?t=1"  # 书架url,如果没有登录进去是访问不了书架的
session = requests.session()

headers = {
     “user-agent”: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"      
}

# 账号密码
data = {
    "username": "18986145549"
    "password": "dongli123456"
}

# 发起一个post请求
response1 = session.post(url, headers=headers, data=data)

# 获取到书架页面,通过cookies
response2 = session.get(book_url, headers=headers))
print(response2.text)

 

三、代理、禁止重定向

 代理

1. 透明代理

代理服务器将客服端的信息转发至目标访问对象,并没有完全隐藏客户端真实的身份。即服务器知道客户端使用了代理IP,并且知道客户端的真实IP地址。

2. 普通匿名代理

代理服务器用自己的IP代替了客户端的真实IP,但是告诉了目标访问对象这是代理访问。

3. 高匿代理

代理服务器良好第伪装了客户端,不但用一个随机的IP代理提客户端的IP,也隐藏了代理信息,服务器不会察觉到客服端是通过代理实现访问的,即用户仿佛就是直接使用代理服务器作为自己的客户端。所以使用高匿代理就可以隐藏自己的真实IP。

禁止重定向

目标网址: https://h5.pipix.com/s/JFfPN5J/

实际访问网址:https://h5.pipix.com/item/837720444338968835?app_id=1319&app=supper&timestamp=1594730497&carrier_region=cn&region=cn&language=zh&utm_source=weixin  通过添加allow redirects=False属性来禁止重定向。

超时处理

import request

url = "http://google.com"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
}

try:
    response = requests.get(url, headers=headers, timeout=3) 
    response = requests.get)url, headers=headers, timeout(3, 7))  # (请求时间, 响应时间)
    print(response.text)
except requests.exceptions.ConnectTimeout as e:  #  捕获连接超时异常 ConnectTimeout
    print("连接超时 错误:", e)

retrying模块

from retrying import retry

@retry   # 如果出现异常会一直重试

# @retry(stop_mmax_attempt_number=3)  # 用来设定最大的尝试次数,超过该次数就停止重试
# @retry(stop_max_delay=3000)   # 设置失败重试的最大时间,单位毫秒,超出时间,则停止重试,3秒之后报错
# @retry(wait_fixed=2000)  # 设置失败重试的间隔时间
# @retry(wait_random_min=1000, wait_random_max=5000)  # 设置失败重试随机性间隔时间  有时快,有时慢

def demo():
    print("==========")
    raise   # 这里故意报错!

if __name__ ==  "__main__":
    demo()

 

posted on 2023-03-15 18:50  興華  阅读(57)  评论(0编辑  收藏  举报