位置: 编程技术 - 正文

Python中urllib+urllib2+cookielib模块编写爬虫实战

编辑:rootadmin

推荐整理分享Python中urllib+urllib2+cookielib模块编写爬虫实战,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

超文本传输协议http构成了万维网的基础,它利用URI(统一资源标识符)来识别Internet上的数据,而指定文档地址的URI被称为URL(既统一资源定位符),常见的URL指向文件、目录或者执行复杂任务的对象(如数据库查找,internet搜索),而爬虫实质上正是通过对这些url进行访问、操作,从而获取我们想要的内容。对于没有商业需求的我们而言,想要编写爬虫的话,使用urllib,urllib2与cookielib三个模块便可以完成很多需求了。首先要说明的是,urllib2并非是urllib的升级版,虽然同样作为处理url的相关模块,个人推荐尽量使用urllib2的接口,但我们并不能用urllib2完全代替urllib,处理URL资源有时会需要urllib中的一些函数(如urllib.urllencode)来处理数据。但二者处理url的大致思想都是通过底层封装好的接口让我们能够对url像对本地文件一样进行读取等操作。下面就是一个获取百度页面内容的代码:

短短4行在运行之后,就会显示出百度页面的源代码。它的机理是什么呢?当我们使用urllib2.Request的命令时,我们就向百度搜索的url(“www.baidu.com”)发出了一次HTTP请求,并将该请求映射到connect变量中,当我们使用urllib2.urlopen操作connect后,就会将connect的值返回到url1中,然后我们就可以像操作本地文件一样对url1进行操作,比如这里我们就使用了read()函数来读取该url的源代码。这样,我们就可以写一只属于自己的简单爬虫了~下面是我写的抓取天涯连载的爬虫:

事实上,上面的代码使用urlopen就可以达到相同的效果了:

为什么我们还需要先对url进行request处理呢?这里需要引入opener的概念,当我们使用urllib处理url的时候,实际上是通过urllib2.OpenerDirector实例进行工作,他会自己调用资源进行各种操作如通过协议、打开url、处理cookie等。而urlopen方法使用的是默认的opener来处理问题,也就是说,相当的简单粗暴~对于我们post数据、设置header、设置代理等需求完全满足不了。因此,当面对稍微高点的需求时,我们就需要通过urllib2.build_opener()来创建属于自己的opener,这部分内容我会在下篇博客中详细写~

而对于一些没有特别要求的网站,仅仅使用urllib的2个模块其实就可以获取到我们想要的信息了,但是一些需要模拟登陆或者需要权限的网站,就需要我们处理cookies后才能顺利抓取上面的信息,这时候就需要Cookielib模块了。cookielib 模块就是专门用来处理cookie相关了,其中比较常用的方法就是能够自动处理cookie的CookieJar()了,它可以自动存储HTTP请求生成的cookie,并向传出HTTP的请求中自动添加cookie。正如我前文所提到的,想要使用它的话,需要创建一个新的opener:

经过这样的处理后,cookie的问题就解决了~而想要将cookies输出出来的话,使用print cj._cookies.values()命令后就可以了~

抓取豆瓣同城、登陆图书馆查询图书归还在掌握了urllib几个模块的相关用法后,接下来就是进入实战步骤了~

(一)抓取豆瓣网站同城活动

豆瓣北京同城活动 该链接指向豆瓣同城活动的列表,向该链接发起request:

我们会发现返回的html代码中,除了我们需要的信息之外,还夹杂了大量的页面布局代码:

如上图所示,我们只需要中间那些关于活动的信息。而为了提取信息,我们就需要正则表达式了~正则表达式是一种跨平台的字符串处理工具/方法,通过正则表达式,我们可以比较轻松的提取字符串中我们想要的内容~这里不做详细介绍了,个人推荐余晟老师的正则指引,挺适合新手入门的。下面给出正则表达式的大致语法:

这里我使用捕获分组,将活动四要素(名称,时间,地点,费用)为标准进行分组,得到的表达式如下:

这样就可以将几个部分提取出来了。

总体代码如下:

在这里需要注意一下编码的问题,因为我使用的版本还是python2.X,所以在内部汉字字符串传递的时候需要来回转换,比如在最后打印“费用“这一项的时候,必须使用i.group(4).decode('utf-8') 将group(4元组中的ASCII码转换为utf8格式才行,否则会发现输出的是乱码。而在python中,正则模块re提供了两种常用的全局查找方式:findall 和 finditer,其中findall是一次性处理完毕,比较消耗资源;而finditer则是迭代进行搜索,个人比较推荐使用这一方法。

Python中urllib+urllib2+cookielib模块编写爬虫实战

最后得到的结果如下,大功告成~

(二)模拟登陆图书馆系统查询书籍归还情况

既然我们能够通过python向指定网站发出请求获取信息,那么自然也能通过python模拟浏览器进行登陆等操作~而模拟的关键,就在于我们向指定网站服务器发送的信息需要和浏览器的格式一模一样才行~这就需要分析出我们想要登陆的那个网站接受信息的方式。通常我们需要对浏览器的信息交换进行抓包~抓包软件中,目前比较流行的是wireshark,相当强大~不过对于我们新手来说,IE、Foxfire或者chrome自带的工具就足够我们使用了~

这里就以本人学校的图书馆系统为例子~

我们可以通过模拟登陆,最后进入图书管理系统查询我们借阅的图书归还情况。首先要进行抓包分析我们需要发送哪些信息才能成功模拟浏览器进行登陆操作。

我使用的是chrome浏览器,在登陆页面按F调出chrome自带的开发工具,选择network项就可以输入学号密码选择登陆了。观察登陆过程中的网络活动,果然发现可疑分子了:

分析这个post指令后,可以确认其就是发送登陆信息(账号、密码等)的关键命令。还好我们学校比较穷,网站做的一般,这个包完全没有加密~那么剩下的就很简单了~记下headers跟post data就OK了~其中headers中有很多实用的信息,一些网站可能会根据user-Agent来判断你是否是爬虫程序从而决定是否允许你访问,而Referer则是很多网站常常用来反盗链的,如果服务器接收到的请求中referer与管理员设定的规则不符,那么服务器也会拒绝发送资源。而post data就是我们在登录过程中浏览器向登陆服务器post的信息了,通常账户、密码之类的数据都包含在里面。这里往往还有一些其他的数据如布局等信息也要发送出去,这些信息通常我们在操作浏览器的时候没有任何存在感,但没了他们服务器是不会响应我们滴。

现在postdata 跟headers的格式我们全部知道了~模拟登陆就很简单了:

其中urllib.urlencode负责将postdata自动进行格式转换,而opener.addheaders则是在我们的opener处理器中为后续请求添加我们预设的headers。测试后发现,登陆成功~~那么剩下的就是找出图书借还查询所在页面的url,再用正则表达式提取出我们需要的信息了~~整体代码如下:

下面是程序运行结果~

使用Python编写爬虫的基本模块及框架使用指南 基本模块python爬虫,webspider。爬取网站获取网页数据,并进行分析提取。基本模块使用的是urllib,urllib2,re,等模块基本用法,例子:(1)进行基本GET

Python的Scrapy爬虫框架简单学习笔记 一、简单配置,获取单个网页上的内容。(1)创建scrapy项目scrapystartprojectgetblog(2)编辑items.py#-*-coding:utf-8-*-#Defineherethemodelsforyourscrapeditems##Seedocumentatio

Python模拟百度登录实例详解 最近公司产品和百度贴吧合作搞活动,为了增加人气,打算做个自动签到的小程序。这个是测试登录的代码,写的比较随意,仅实现了登录并读取关注

标签: Python中urllib+urllib2+cookielib模块编写爬虫实战

本文链接地址:https://www.jiuchutong.com/biancheng/381294.html 转载请保留说明!

上一篇:深入剖析Python的爬虫框架Scrapy的结构与运作流程(了解python)

下一篇:使用Python编写爬虫的基本模块及框架使用指南(python怎么写爬虫)

  • 亏损企业股权转让
  • 装修收入应如何确定
  • 非拒付追索待清偿是什么意思
  • 房地产企业土地出让金抵减销项税额
  • 捐赠的费用放在什么科目
  • 报验户预缴个税怎么算
  • 企业缴纳增值税后还需缴纳所得税吗
  • 没有发票如何报账
  • 公司注销留抵税金能退税吗
  • 医院其他收入包括哪些项目
  • 单位购买食品饮料的进项税可以抵扣吗?
  • 补交关税增值税怎么做分录?
  • 公司厂房在建但已收到房租是否要交房产税呢?
  • 账本印花税计税金额或件数怎么申报2023
  • 小微企业需要开公户吗
  • 增值税季度不超过30万怎么填表
  • 小规模纳税人可以享受小微企业吗
  • 转让土地使用权交什么税
  • 加工费计入应付账款可以吗
  • 新药从开发到生产的流程
  • 农副产品的进项税额
  • win 11 无法安装
  • 为什么ie浏览器打开是2345浏览器
  • 存续在业有什么区别
  • 银行贷款需要走第三方账户,第三方需要提供身份证
  • 工程施工预付账款会计分录
  • 软件工程毕设题目冷门
  • 详解php实现执行任务
  • 简述php中常用魔术方法及其各自的作用
  • 劳务费还没发可以先计提吗
  • 服务,不动产和无形资产怎么填小规模
  • 出差住宿费会计分录怎么做
  • web自动化selenium实战项目
  • 生态位模型原理
  • ijk解码是什么意思
  • 域名续费多久生效
  • c++交换语句
  • 备抵法会计处理
  • 质保金企业所得税纳税时间
  • 为什么增值税申报表保存不了
  • 发票开错时,如何做账务处理?
  • 固定资产一次性扣除如何做账
  • 织梦怎么用模板建站
  • 加油卡充值如何退款
  • 营业额的纳税比例是多少
  • 增值税专用发票怎么开
  • 个人所得税利息股息红利所得适用比例税率
  • 汇算清缴前取得暂估发票
  • 防伪税控服务费全额抵扣申报表怎么填
  • 现金日记账年结需要另起一页吗
  • 多打的投资款怎么入账
  • 免税发票怎么抵扣
  • 伙食费占支出比例
  • 营业收入和营业总收入一样吗
  • mysql数据存在内存还是硬盘
  • mysql未知的服务器主机
  • window小技巧
  • windows service 2008 r2
  • linux编译步骤
  • Windows开关机音乐-哔哩哔哩biibii
  • windows无法打开此文件
  • netsh cmd
  • redhat配置
  • linux 根目录
  • linux系统中文输入法切换不出来
  • 文件视图分为哪几种
  • 游戏编程设计模拟软件
  • dirsearch批量
  • 2012年腾讯股价多少
  • 运行shell脚本命令 sh
  • shell脚本 su
  • Unity3d C# Socket 下载文件 (同步向)
  • android中toast用法
  • 电梯维护保养费按什么缴纳增值税
  • 全国大学生数学竞赛证书电子版查询
  • 香港企业查询系统
  • 4s店买车需要驾驶证吗
  • 地税客服电话
  • 怎么查税务是否备案
  • 年报基础数据怎么查
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设