爬虫学习——网页下载器和urllib2模块

news/2024/7/19 10:11:54 标签: 爬虫, python

什么是网页下载器?

一、网页下载器是爬虫的核心组件

 

二、常用的python网页下载器有urlilib2基础模块和requests第三方插件两种

urllib2支持功能:1.支持直接url下载;2.支持向网页直接输入的数据;3.支持需要登陆网页的cookie处理;4.需要代理访问的代理处理

 三、urllib2的三种下载方法

方法一.直接下载法

相应代码如下:

#-*-coding:utf-8-*-

#调用urllib2模块
import urllib2 

#直接请求
response=urllib2.urlopen("http://www.baidu.com")

#获取状态码,如果是200表示成功
print response.getcode()

#读取爬取得内容
print response.read()

方法2:添加data和http

data:即用户需要输入的数据

http-header:主要是为了提交http的头信息

将url、data、header三个参数传递给urllib2的Request类,生成一个request对象,接着再使用urllib2中的urlopen方法,以request作为参数发送网页请求

 

 

相应代码如下:

 1 #coding=utf-8
 2 import urllib2
 3 
 4 #创建Request对象
 5 request= urllib2.Request("所要爬取的url")
 6 
 7 #添加数据a=1
 8 request.add_data('a','1')
 9 
10 #添加http的header
11 request.add_header('User-Agent','Mozilla/5.0')
12 
13 #发送请求获取结果
14 response= urllib2.urlopen(request)
15 
16 print response.getcode()
17 
18 print response.read()
方法二代码示例

  方法三、添加特殊情境的处理器

有些网页需要登录才能访问,需要添加cookie进行处理,这里使用HTTPCookieProcessor

需代理才能访问的使用:ProxyHandler

使用https加密协议的网页:HTTPSHandler

有的url相互自动的跳转关系:HTTPRedirectHandler

将这些handler传送给urllib2的build_opener(handler)方法来创建opener对象,在传送给install_opener(opener),之后urllib2就具有了这些场景的处理能力

代码如下:cookie增强处理

 1  #-*-coding:utf-8-*-
 2 
 3 #引入urllib2和cookielib模块
 4 import urllib2,cookielib
 5 
 6 #创建cookie容器,来存储cookie的数据
 7 cj=cookielib.CookieJar()
 8 
 9 #创建一个opener,然后使用urllib2的HTTPCookieProcessor以cj的cookiejar作为参数生成一个handler,再将此handler传给build_opener方法生成一个opener对象
10 opener = urlib2.build_opener(urllib2.HTTPCookieProcessor(cj))
11 
12 #然后给urllib2安装opener来增强他的处理器
13 urllib2.install_opener(opener)
14 
15 #使用带有cookie的urllib2 访问网页,实现网页的爬取
16 response = urllib2.urlopen("http://www.baidu.com")
增强处理

 

转载于:https://www.cnblogs.com/ryuuku/p/7131419.html


http://www.niftyadmin.cn/n/979211.html

相关文章

移动游戏机和PC已合并游戏的奇点

As crossplay unifies player communities, gaming hardware differences are less relevant than ever. The walls are breaking down, all paths now lead to the same destination, and games are better for it.由于交叉游戏统一了玩家社区,因此游戏硬件差异变得…

linux文件管理命令详解

cp:copycp [OPTION] SRC DEST原则:只能复制一个文件到一个文件:原文件名改为目标文件名多个文件到一个目录:目标是个目录且存在,就是原文件以原文件名保存在目标目录中egcp file1 file2 dir3cp中只能出现一个目标,所…

PAT乙级 1014 福尔摩斯的约会 (20 分)

题目内容 大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间星期四 14:04,因为前面两字符串中第 1 对相…

SQLPlus的两种登录方式的不同效果

Windows 8,Oralce11g,命令行 1.输入“sqlplus”,回车,提示:请输入用户名,输入用户名,回车,提示,请输入口令,输入口令后,回车,报ORA-12…

PAT乙级 1016 部分A+B (15 分) --两种方法

题目内容 正整数 A 的“DA​(为 1 位整数)部分”定义为由 A 中所有 DA​ 组成的新整数 PA​。例如:给定 A3862767,DA​6,则 A 的“6 部分”PA​ 是 66,因为 A 中有 2 个 6。 现给定 A、DA​、B、DB​&…

Android -- TabHost、Fragment、状态保存、通信

工程结构 TabAFm到TabEFm都是Fragment,并且每个Fragment对应一个布局文件。 TabAFm.java …

Java面试题(线程)

第一次写,写的目的就是为了帮助自己更好地查看自己学的知识,也是对自己平时学习的一些总结。可能有些地方并不是完美,覆盖的知识面不够广泛,请谅解。 问题一 线程和进程的区别: 进程:进程就是任务管理器中那…

PAT乙级 1017 A除以B (20 分) --两种方法

题目内容 本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 ABQR 成立。 输入格式: 输入在一行中依次给出 A 和 B,中间以 1 空格分隔。 输出格式: …