Python3爬虫代理服务器与cookie的使用

python3 urllib 爬虫 Handler 处理器PRoxyHandlr 处理器(代理设置) 前言 使用代理IP,这是爬虫/反爬虫的第二大招,通常也是最好用的。 很多网站会检测某一段时间某个IP的访问次数(通过流量统计,系统日志等),如果访问次数多的不像正常人,它会禁止这个IP的访问。 所以我们可以设置一些代理服务器,每隔一段时间换一个代理,就算IP被禁止,依然可以换个IP继续爬取。 urllib2中通过ProxyHandler来设置使用代理服务器,下面代码说明如何使用自定义ope... 阅读详情

代理服务器的设置

有时使用同一个IP去爬取同一个网站上的网页,久了之后会被该网站服务器屏蔽。那么怎么解决这个问题呢?
解决的方法很简单,就是使用代理服务器。
使用代理服务器去爬取某个网站的内容的时候,在对方的网站上,显示的不是我们真实的IP地址,而是代理服务器的IP地址。并且在Python爬虫中,使用代理服务器设置起来也很简单。
给大家推荐一个网址,http://www.xicidaili.com/,这上面有免费的代理Ip。
选择好代理ip地址后,我们就可以进行相应的程序编写了,可以使用以下程序,实现通过代理服务器来爬取网站内容。

def use_proxy(proxy_addr,url):
    import urllib.request
    proxy=urllib.request.ProxyHandler({'http':proxy_addr})
    opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
    urllib.request.install_opener(opener)
    data=urllib.request.urlopen(url).read().decode('utf8')
    return data

proxy_addr='61.163.39.70:9999'
data=use_proxy(proxy_addr,'http://www.baidu.com')
print(len(data))

我们首先建立一个名为use_proxy的自定义函数,该函数主要实现使用代理服务器来爬取某个URL网页的功能。
在函数中,我们设置两个形参,第一个形参为代理服务器的地址,第二个形参代表要爬取的网页的地址。
然后,使用urllib.request.ProxyHandler()来设置对应的代理服务器信息,设置格式为:urllib.request.ProxyHandler({‘http’:代理服务器地址}),接下来,使用urllib.request.build_opener()创建了一个自定义的opener对象,第一个参数为代理信息,第二个参数为urllib.request.HTTPHandler类。
为了方便,可以使用urllib.request.install_opener()创建全局默认的opener对象,那么,在使用urlopen()时亦会使用我们安装的opener对象,所以我们下面才可以直接使用urllib.request.urlopen()打开对应网址爬取网页并读取,编码后赋给变量data,最后返回data的值。
如果在使用代理服务器进行网站爬取时,出现相应异常,则需要考虑是否对应的代理IP失效了,如果是,换一个代理Ip即可。实际爬取的时候,可以准备多个代理IP,轮流进行爬取,若失效,则程序直接自动替换为其他代理ip地址,进行爬取。


Cookie的使用

在爬虫的使用中,如果涉及登录等操作,经常会使用到Cookie。
那什么是Cookie呢?
简单来说,我们访问每一个互联网页面,都是通过HTTP协议进行的,而HTTP协议是一个无状态协议,所谓的无状态协议即无法维持会话之间的状态。
比如,仅使用HTTP协议的话,我们登录一个网站的时候,假如登录成功了,但是当我们访问该网站的其他网页的时候,该登录与状态则会消失,此时还需要再登录一次,只要页面涉及更新,就需要反复的进行登录,这是非常不方便的。
所以此时,我们需要将对应的会话信息,比如登录成功等信息通过一些方式保存下来,比较常见的方式有两种:通过Cookie保存会话信息或通过Session保存会话信息。
不管是通过哪种方式进行会话控制,在大部分时候,都会用到Cookie。比如在爬虫的登录中,如果没有Cookie,我们登录成功了一个网页,但如果我们要爬取该网站的其他网页的时候,仍然会是未登录状态。如果有了Cookie,当我们登录成功后,爬取该网站的其他网页时,则会保持登录状态进行内容的爬取。

实战

我们拿ChinaUnix这个论坛网址就行实战测试一下吧,网址:http://bbs.chinaunix.net/。
我注册了一个帐号,进入网址,点击登录。我们会看到这样的界面:

这里写图片描述

按下F12,此时我们随便输入一个帐号和密码。查看network发生了哪些变化。
此时,我们找到了其中的一个POST请求,如图:

这里写图片描述

首先,我们能看到登录时提交表单数据的真实URL:http://bbs.chinaunix.net/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=Lq8Qi

再往下拉,我们会看到提交的表单数据:

这里写图片描述

此时我们知道了,帐号的关键字是username,密码的关键字为password。
知道了这些,我们就可以开工了。
我们先测试一下不使用cookie登录成功后,再次访问别的界面会有什么效果:
代码如下:

import urllib.request
import urllib.parse
import urllib.error
import http.cookiejar

url='http://bbs.chinaunix.net/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=LcHFP'
data={
    'username':'fengxin88888',
    'password':'mima',
}
postdata=urllib.parse.urlencode(data).encode('utf8')
#添加头部信息
header={
    'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
    'Referer':'http://bbs.chinaunix.net/member.php?mod=logging&action=login&logsubmit=yes'
}

request=urllib.request.Request(url,postdata,headers=header)

try:
    reponse=urllib.request.urlopen(request)
except urllib.error.HTTPError as e:
    print(e.code)
    print(e.reason)

fhandle=open('./test.html','wb')    #保存登录后的页面到文件
fhandle.write(reponse.read())
fhandle.close()

url2='http://bbs.chinaunix.net/forum-327-1.html'   #再次访问该网站别的页面
reponse2=urllib.request.urlopen(url)
fhandle2=open('./test2.html','wb')   #保存到文件中
fhandle2.write(reponse2.read())
fhandle2.close()

别盯着上面代码中的password看了,那个不是真实密码 ,嘿嘿。
此时,我们先在浏览器打开我们保存的test.html文件,我们会看到:
这里写图片描述

我们会发现,此时已经登录成功。我们再打开test2.html文件,看看是什么情况。

这里写图片描述

我们会发现,此时是没有登录的状态。
出现这样的情况,就是因为我们没有设置Cookie处理,而HTTP协议是一个无状态的协议,我们访问了新网页,自然会话信息会消失。
如果希望登录状态一直保持,则需要进行Cookie处理。
进行Cookie处理的一种常用思路如下:

  • 导入Cookie处理模块http.cookiejar。
  • 使用http.cookiejar.CookieJar()创建CookieJar对象。
  • 使用HTTPCookieProcessor创建cookie处理器,并以其为参数构建opener对象。
  • 创建全局默认的opener对象。

所以,以上代码可以改进为;

import urllib.request
import urllib.parse
import urllib.error
import http.cookiejar

url='http://bbs.chinaunix.net/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=LcHFP'
data={
    'username':'fengxin88888',
    'password':'mima',
}
postdata=urllib.parse.urlencode(data).encode('utf8')
header={
    'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
    'Referer':'http://bbs.chinaunix.net/member.php?mod=logging&action=login&logsubmit=yes'
}

request=urllib.request.Request(url,postdata,headers=header)
#使用http.cookiejar.CookieJar()创建CookieJar对象
cjar=http.cookiejar.CookieJar()
#使用HTTPCookieProcessor创建cookie处理器,并以其为参数构建opener对象
cookie=urllib.request.HTTPCookieProcessor(cjar)
opener=urllib.request.build_opener(cookie)
#将opener安装为全局
urllib.request.install_opener(opener)

try:
    reponse=urllib.request.urlopen(request)
except urllib.error.HTTPError as e:
    print(e.code)
    print(e.reason)

fhandle=open('./test.html','wb')
fhandle.write(reponse.read())
fhandle.close()

url2='http://bbs.chinaunix.net/forum-327-1.html'
reponse2=urllib.request.urlopen(url)
fhandle2=open('./test2.html','wb')
fhandle2.write(reponse2.read())
fhandle2.close()

运行完后,此时我们再打开test2.html文件,我们会发现此时会保持我们的登录信息,为已登录状态。
也就是说,对应的登录状态已经通过Cookie保存。

python3爬虫笔记之爬虫基础 url格式规范: sheme:协议。通常有http、https、ftp等 username、password:用户名和密码 hostname:主机地址 port:端口 path:路径。网络资源在服务器中的指定位置 paramenters:参数,访问资源的附加信息 query:查询,如果多个查询用&隔开 fragment:片段。资源内部的书签http中文名为超文本传输协议,https是http的安全版,在http下加了层ssl ssl的作用是建立安全通道,确保数据的安全性,确保数据的真实性http请求的过程: 阅读详情

相关推荐

Linux下python抓取动态网页内容

Python抓取动态网页内容

他乡幻想的专栏 776

python 获取网页的内容

1.安装pip 我的个人桌面系统用的linuxmint,系统默认没有安装pip,考虑到后面安装requests模块使用pip,所以我这里第一步先安装pip。   1 $ sudo apt install python-pip 安装成功,查看PIP版本:     1 $ pip -V 2.安装reques...

位文杰的博客 7万+

百度cookie链接提交

1.此工具需要百度帐号cookie 2.需要购买代理ip 这是真正实际上看得见的引蜘蛛。跟那些无限提交的不一样.一个账号提交10个链接(一天限制) 网上购买cookie帐号是1快钱400个.相当于提交4000次 好了。知道就下载吧!

python3下的urlopen、urlencode、cookiejar、build_opener等

python3开始很多包的位置和python2.7以前的不一样了,比如:urllib2合并到了urllib下,urlopen使用时包的位置为urllib.request.urlopen,urlencode使用包位置为urllib.parse.urlencode,cookielib变更为了http.cookiejar 如: cookie_jar = cookiejar.CookieJar() #定义有添加cookie 功能的处理器 cookie_handler = urllib.request.HTTPCoo

u010741112的博客 430

AI应用安全 - Prompt注入攻击

随着大模型的爆火,各行各业都在使用大模型进行智能化改造。但是如何做一个可靠的大模型应用,就需要考虑各种安全问题。本文主要介绍一种常见的安全问题,即prompt注入攻击,并介绍一些防范手段。Prompt Injection Attack(提示注入攻击)是针对大型语言模型(LLM)的一种新兴安全威胁,攻击者通过精心构造的输入提示(prompt)来操纵模型行为,使其产生非预期输出或执行恶意操作。它主要包括两种注入方式,一是直接注入,而是间接注入。

sinat_28694519的博客 1932

从 JDK8 到 JDK17:CRMEB 框架升级

【摘要】CRMEB开源框架已成功从JDK8升级至JDK17,带来显著性能提升:并发吞吐量提高35%,响应延迟降低40%,资源占用减少25%。升级方案解决87个技术卡点,支持模块化扩展和微服务转型,兼容SpringBoot3.0等新技术。提供基础版到企业级的升级服务,包含代码重构指导和性能调优。经金融级验证的方案可帮助电商平台实现日均10万+UV承载,支付成功率提升至99.7%。现以低于市场30%的价格提供全周期技术支持,助力企业抢占技术先机。

weixin_39782540的博客 700

Python爬虫实战(六)——使用代理IP批量下载高清小姐姐图片(附上完整源码)

一、爬取目标 二、实现效果 三、准备工作 四、代理IP 4.1 代理IP是什么? 4.2 代理IP的好处? 4.3 获取代理IP 4.4 Python获取代理IP 五、代理实战 5.1 导入模块 5.2 设置翻页 5.3 获取图片链接 5.4 下载图片 5.5 调用主函数 5.6 完整源码 5.

努力让自己发光,对的人才能迎着光而来 32万+

MinerU与Docling:智能文档处理框架对比

本文对比分析了MinerU和Docling两大智能文档处理框架。MinerU专注于高精度PDF解析,采用多模态AI技术,在学术文献、金融报表等复杂文档处理上表现优异;Docling则定位企业级多格式文档处理平台,支持10+格式转换,更适合文档管理系统等场景。技术层面,MinerU基于VLM模型实现端到端处理,Docling采用插件化多后端架构。性能测试显示MinerU精度更高(95%+),但资源消耗较大;Docling处理速度更快(1-3秒/页),部署更灵活。

轩哥的个人研究和成长记录 1910

使用Python搭建代理服务器- 爬虫代理服务器详细指南

当收到 `/proxy` 路由的 GET 请求时,我们会获取 `url` 和 `proxy` 参数,并在请求中使用指定代理来访问指定的 URL。1. 添加IP限制:你可以添加一个IP白名单或黑名单,只允许特定的IP地址访问代理服务器,或者阻止特定的IP地址访问。通过上述例子的配置和改进,你可以根据实际需求来扩展和定制你的Python爬虫代理服务器。将 `url` 替换为目标网站的URL,并将 `proxy` 替换为代理服务器的地址。3. 日志记录:在代理服务器中添加日志记录功能,可以方便后续的排错和分析。

weixin_73725158的博客 2229

基于深度学习YOLOv10的障碍物检测系统

为了方便用户使用,我们将开发一个图形用户界面(GUI),允许用户上传图像或视频流并查看检测结果。我们使用PySide6开发GUI界面,它是Qt框架的Python绑定,适用于开发跨平台的桌面应用程序。本文详细介绍了如何基于YOLOv10模型构建一个障碍物检测系统,包括数据集准备、模型训练和推理到图形用户界面的开发。通过这一系统,用户可以方便地上传图像或视频流并进行障碍物检测,广泛应用于自动驾驶、机器人导航等领域。

斌擎科技 1052

部署OpenClaw时设置环境变量提示export: not valid in this context的完整解决方案

OpenClaw环境变量设置错误解决方案 问题概述 在部署OpenClaw时设置环境变量出现"export: not valid in this context"错误,通常由以下原因导致: 在非交互式shell中使用export命令 在命令替换或管道中使用export 脚本文件包含Windows换行符(CRLF) 解决方案 修正脚本执行方式:确保export命令在正确的shell上下文中使用 使用source命令:通过. setup_openclaw.sh或source setup_op

博客 457

Python模块之urllib模块

Py2.x: Urllib库 Urllin2库 Py3.x: Urllib库 变化: 在Pytho2.x中使用import urllib2——-对应的,在Python3.x中会使用import urllib.request,urllib.error。 在Pytho2.x中使用import urllib——-对应的,在Python3.x中会使用import urllib.request,urllib.error,urllib.parse。 在Pytho2.x中使用import urlpa.

Jiaxing_Li的博客 423

C#利用最小二乘法拟合任意次函数曲线

给出一组离散点,确定一个函数逼近原函数,插值是这样的一种手段。在实际中,数据不可避免的会有误差,插值函数会将这些误差也包括在内。因此,我们需要一种新的逼近原函数的手段: ①不要求过所有的点(可以消除误差影响);②尽可能表现数据的趋势,靠近这些点。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小 [1],其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达,具体可以查阅相关资料。最小二乘法(又称最小平方法)是一种数学技术。

qq_30725967的博客 3755

Python3中urllib使用介绍

Py2.x: Urllib库 Urllin2库 Py3.x: Urllib库 变化: 在Pytho2.x中使用import urllib2——-对应的,在Python3.x中会使用import urllib.request,urllib.error。 在Pytho2.x中使用import urllib——-对应的,在Python3.x中会使用import urllib.request,u...

zlp_zky的博客 202

BoT-SORT实战:手把手教你实现BoT-SORT训练和测试

文章目录摘要1、数据准备2、配置BoT-SORT环境2.1、获取代码2.2、创建虚拟环境2.3、安装必要的包2.3.1、安装pytorch2.3.2、安装cython2.3.3、安装Cython-bbox2.3.4、安装faiss2.3.5、安装其他的包3、训练3.1、生成REID数据集3.2、预训练模型3.2.1、ByteTrack预训练模型3.2.2、REID预训练模型3.3、开始训练4、如何更改FASTREID的BackBone?5、测试5.1、测试视频5.2、测试摄像头5.3、多类别测试 摘要 Bo

m0_47867638的博客 2297

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Python 3中的Urllib库的使用 !

在Python中有着这样一个常用的、基础的爬虫库。在Python2中为urllib.urllib,在Python3中官方为了便于管理,将和请求有关的函数封装进了urllib.request模块中。 在此处,使用Python3做记录。 urlopen函数 urlopen函数是request中的一个很常用的函数,它主要用于打开一个网页。其中有着很多的属性。 from urllib impor...

Pythoncxy的博客 348

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Python3中urllib使用与源代码

Python3中urllib使用与源代码 Py2.x:Urllib库 Urllin2库Py3.x:Urllib库变化:在Pytho2.x中使用import urllib2——-对应的,在Python3.x中会使用import urllib.request,urlli...

weixin_30727835的博客 487

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Python3学习笔记(4)

此篇是作者(一个萌新)在学习Python3的一点回顾和总结(适合有java或c基础的读者观看) spider(爬虫) urllib 简单 ''' 利用urllib模块爬取一个网页 ''' import urllib url = "https://www.douban.com" req = urllib.request.urlopen(url) html = req.read...

youhou22的博客 449

Python 网络爬虫与数据采集(二)

第二部分 初章 网络爬虫初识 4. 网络爬虫请求篇

无 2478

Python网络爬虫之requests库

①urllib库:Python自带的标准库,代码编写略微复杂②requests库:第三方库,在urllib库的基础上建立的,但使用起来更简洁方便③scrapy库:第三方库,是一个专业应用程序开发的网络爬虫库④selenium库:第三方库,可用于驱动计算机中的浏览器执行相关命令,而无需用户手动操作。

weixin_72931638的博客 2321

网站不能抓取?6种爬虫破禁方法!

如果你一直被网站封杀却找不到原因,那么这里有个检查列表,可以帮你诊断一下问题出在哪里。首先,检查 JavaScript。如果你从网络服务器收到的页面是空白的,缺少信息,或其遇到他不符合你预期的情况(或者不是你在浏览器上看到的内容),有可能是因为网站创建页面的JavaScript 执行有问题。**检查正常浏览器提交的参数。**如果你准备向网站提交表单或发出POST请求,记得检查一下页面的内容,看看你想提交的每个字段是不是都已经填好,而且格式也正确。

m0_48891301的博客 5133

python网络爬虫案例教程 pdf_精通Python网络爬虫PDF文档免费下载

目录前 言第一篇 理论基础篇第1章 什么是网络爬虫 31.1 初识网络爬虫 31.2 为什么要学网络爬虫 41.3 网络爬虫的组成 51.4 网络爬虫的类型 61.5 爬虫扩展——聚焦爬虫 71.6 小结 8第2章 网络爬虫技能总览 92.1 网络爬虫技能总览图 92.2 搜索引擎核心 102.3 用户爬虫的那些事儿 112.4 小结 12第二篇 核心技术篇第3章 网络爬虫实现原理与实现技术 15...

weixin_39538536的博客 1223
上一篇: Python3之urllib库的使用总结
下一篇: Python3爬虫实战之爬取京东图书图片
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值