python爬虫(2)

本文讲解了如何利用POST请求安全地向服务器发送数据,解析Ajax刷新内容,区别静态与动态网页,并演示了如何处理SSL证书验证和使用opener处理代理与cookie,包括创建代理、保存cookie文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

五,POST请求

六,爬取Ajax刷新技术的新增的网页内容

七,静态网页和动态网页的区别

八,请求SSL证书验证

九,openner的使用(设置代理及cookie处理)

1,opener的一般创建方法

2,代理proxy的使用

1,代理的分类

2,使用代理proxy的一般代码写法

3,cookie的使用

1,cookie的一般使用方法

2,cookie控制器的写法

3,生成cookie文件并保存到本地


五,POST请求

        post请求用于向服务器发送数据,这些数据被隐藏在请求报文的报文体当中,十分的安全,而不像GET方式将参数暴露在url当中。

        使用Request对象对相关数据进行封装从而得到一个请求报文。将需要发送到服务器的数据赋给在Request初始化方法里面的data参数即可,data参数是一个字典。

        html当中的<form>标签存在一个action的参数,他的值一般是是一个服务器脚本的地址,当提交表单时,所有数据就会发送的到服务器并被这个脚本进行处理。这种向服务器提交数据的请求方式一般是post。

        下面是一个post请求的例子。一旦Request对象中添加了data参数,那么就会默认使用post的方式请求。

from urllib.parse import urlencode
from fake_useragent import UserAgent

url = 'https://www.21wecan.com/rcwjs/searchlist.jsp'
headers = {
    'User-Agent': UserAgent().chrome,
}
args = {
    'searchword': '人才'
}
req = Request(url=url, headers=headers, data=urlencode(args).encode())
resp = urlopen(req)
print(resp.read().decode('utf-8'))

六,爬取Ajax刷新技术的新增的网页内容

        Ajax是一门无刷新更新网页的技术,他是浏览器的一个组件,在后台通过http请求得到新的html代码插入到dom树中,从而更新网页。

        有些网页使用Ajax来更新网页,爬虫爬取的时候也需要对Ajax这部分内容进行爬取。

        由于Ajax使用的是xmlrequest协议,我们需要在抓包软件或者浏览器的抓包功能中人工提取Ajax所请求的网络地址。

        下面的代码使用爬虫请求某网站的Ajax服务器地址,服务器返回了一个JSON文本文件,再将这个文本文件(响应报文的内容)打印。需要对这个文本文件进行格式化显示才会显得美观。

from urllib.request import Request, urlopen
from urllib.parse import urlencode
from fake_useragent import UserAgent

headers = {
    'User-Agent': UserAgent().chrome,
}
args = {
    'pageNo': 4,
    'pageSize': 50
}
url = 'https://www.hupu.com/home/v1/news?' + urlencode(args)
print(urlencode(args), '\n', url)
req = Request(url=url, headers=headers, )  # data=urlencode(args).encode()
resp = urlopen(req)
print(resp.read().decode('utf-8'))

七,静态网页和动态网页的区别

        静态网页:可以从url地址直接得到我们想要的数据的网页。

        动态网页:使用了Ajax这种暗地里获取数据的网页,数据url不显示在浏览器网页地址框的网页。

        为了获取Ajax这种隐藏请求方式和地址的技术,需要使用抓包工具抓取Ajax访问的url地址。xhr一般是Ajax请求的类型。

八,请求SSL证书验证

        https是http协议的加密版,实现加密的核心就所证书,通过证书生成一系列的秘钥来实现数据在传输过程中处于加密状态,到达浏览器或者服务器之后再进行解密。

        当需要爬取https开头的网址时,可能会遇到证书过期,不匹配等问题。 

import ssl
import urllib.request

# 忽略SSL安全认证
context = ssl._create_unverified_context()  # 添加到context参教里
response = urllib.request.urlopen(url='https://www.baidu.com/', context=context)
print(response.getcode())

九,openner的使用(设置代理及cookie处理)

        由于各种反爬虫技术层出不穷,各种反反爬技术也应运而生,其中一种方法就是使用代理,本质上就是隔一段时间换一个ip地址。或者租几台云电脑,在每台电脑上同时运行爬虫程序。

1,opener的一般创建方法

from urllib.request import Request, urlopen,build_opener,HTTPHandler

from fake_useragent import UserAgent
url='http://httpbin.org/get'
headers = {
    'User-Agent': UserAgent().chrome,
}
req = Request(url=url, headers=headers, )
opener = build_opener(HTTPHandler(debuglevel=1))
# 传入不同的控制器,从而创建出不同的打开器,从而改变http请求的报文,控制器里面带有参数
resp = opener.open(req)
print(resp.read().decode('utf-8'))

2,代理proxy的使用

1,代理的分类

        推荐花钱使用高匿代理,被爬取的网址既不知道代理服务器的ip也不知道当前主机的ip。

2,使用代理proxy的一般代码写法

from urllib.request import Request, build_opener, ProxyHandler
from fake_useragent import UserAgent

url = 'http://httpbin.org/get'
headers = {
    'User-Agent': UserAgent().chrome,
}
req = Request(url=url, headers=headers, )
# 格式如下:ProxyHandler({'type':'username:pwd@ip_addr:port'}),需要免费的ip代理在这个网址:https://www.zdaye.com/dayProxy.html
proxy_handler = ProxyHandler({'http': '112.25.236.167:9091'})
opener = build_opener(proxy_handler)
resp = opener.open(req)
print(resp.read().decode('utf-8'))

3,cookie的使用

        某些网站需要用户登录之后才能进行操作,但是我们并不需要每次打开网页都输入账号密码进行登录,而是会自动登录。这就是cookie的作用,cookie是服务器存在浏览器本地的一个加密文件,里面储存有各种敏感信息,如密码等。

        响应报文头的参数SET-Cookie记录了从服务器发来的需要存在本地的cookie数据。

        请求报文头参数Cookie会将本地cookie中的数据以post形式发送到服务器。

        使用urllib来操作cookie,从而使我们的爬虫顺利爬到数据。

        下图就是cookie请求头。

1,cookie的一般使用方法

        当已经访问过某网页并已经生成了cookie,下一次再访问的时候就可以直接添加cookie请求头,从而实现网页自动登录。

from urllib.request import Request, urlopen,build_opener,HTTPHandler
from fake_useragent import UserAgent
url='http://httpbin.org/get'
#在headers中添加cookie请求头即可
headers = {
    'User-Agent': UserAgent().chrome,
    'Cookie':'自己从浏览器抓包工具复制过来'
}
req = Request(url=url, headers=headers, )
opener = build_opener(HTTPHandler(debuglevel=1))
resp = opener.open(req)
print(resp.read().decode('utf-8'))

2,cookie控制器的写法

        创建一个cookie控制器之后,再访问这个网页就会主动读取上一次访问时保存在cookie中的各种信息(临时会话cookie保存在内存中而不在硬盘中)。cookie参数详解

from urllib.request import Request, build_opener,HTTPCookieProcessor
from fake_useragent import UserAgent
url='https://www.nvidia.cn/'
headers = {
    'User-Agent': UserAgent().chrome,
}
req = Request(url=url, headers=headers, )
# 创建一个能够保存cookie的handler,传入build_opener()方法,最终返回一个打开器
# HTTPCookieProcessor()方法需要一个cookie对象作为参数,然后返回一个控制器,
opener = build_opener(HTTPCookieProcessor())
resp = opener.open(req)
print(resp.read().decode('utf-8'))

3,生成cookie文件并保存到本地

        当一个网页,比如b站,cookie会保存我们的登录信息,这个cookie保存在本地的硬盘中。当我们使用爬虫而不是浏览器访问b站时,爬虫因为没有cookie而无法登录,这个时候就可以把b站保存在硬盘上的cookie文件拿来给爬虫使用,实现爬虫也能自动登录到b站。

from urllib.request import Request, build_opener, HTTPCookieProcessor
from fake_useragent import UserAgent
from http.cookiejar import MozillaCookieJar

url = 'https://www.nvidia.cn/'
headers = {
    'User-Agent': UserAgent().chrome,
}
cookie = MozillaCookieJar()  # 创建一个cookie对象,他会自动记录各种cookie信息
req = Request(url=url, headers=headers, )
opener = build_opener(HTTPCookieProcessor(cookiejar=cookie))
resp = opener.open(req)
cookie.save('cookie.txt', ignore_discard=1, ignore_expires=1)  # 保存cookie对象
cookie.load('cookie.txt', ignore_discard=1, ignore_expires=1)  # 加载cookie文件
print(resp.read().decode('utf-8'))
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值