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

什么是网页下载器?

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

二、常用的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")

增强处理

时间: 2024-10-10 23:58:17

爬虫学习——网页下载器和urllib2模块的相关文章

第5章 网页下载器和urllib2模块

网页下载器:将互联网上URL对应的网页下载到本地的工具 通过网页下载器将互联网中的url网页,存储到本地或内存字符串 python有哪几种网页下载器? 1.urllib2  python官方基础模块 2.requests   python第三方包更强大 urllib2下载网页方法1:最简洁方法 url-------------------------->urllib2.urlopen(url) 代码: import urllib2 /#直接请求 response = urllib2.urlopn

爬虫学习——网页解析器Beautiful Soup

一.Beautiful Soup的安装与测试 官方网站:https://www.crummy.com/software/BeautifulSoup/ Beautiful Soup安装与使用文档:  https://www.crummy.com/software/BeautifulSoup/bs4/doc/ 1.首先测试一下bs4模块是否已经存在,若不存在再安装即可,我用的是kali测试发现bs4模块已经存在,下面介绍如何测试与安装 新建python文档输入以下代码 1 import bs4 2

用 python 实现一个多线程网页下载器

今天上来分享一下昨天实现的一个多线程网页下载器. 这是一个有着真实需求的实现,我的用途是拿它来通过 HTTP 方式向服务器提交游戏数据.把它放上来也是想大家帮忙挑刺,找找 bug,让它工作得更好. keywords:python,http,multi-threads,thread,threading,httplib,urllib,urllib2,Queue,http pool,httppool 废话少说,上源码: 1 # -*- coding:utf-8 -*- 2 import urllib,

爬虫学习——网页解释器简介

一.Python的网页解析器 正则表达式:将整个网页文档当作字符串,然后使用模糊匹配的方式,来提取出有价值的数据和新的url 优点:看起来比较直观 缺点:若文档比较复杂,这种解析方式会显得很麻烦 2.html.parser:此为python自带的解析器 3.lxml:第三方插件解析器,可解析html和xml网页 4.Beautiful Soup:强大的第三方插件解析器,可使用html.parser和lxml解析器 其中正则表达式采用模糊匹配的表达方式:html.parser.lxml.Beaut

scrapy学习2 爬虫中间件,下载器中间件之添加代理

中间件 注意:这些中间件都放在middleware中 下载中间件 作用 实例: 代理被封,添加代理 方式一:内置添加代理功能 import os # -*- coding: utf-8 -*- import os import scrapy from scrapy.http import Request class ChoutiSpider(scrapy.Spider): name = 'chouti' allowed_domains = ['chouti.com'] start_urls =

防止网页被搜索引擎爬虫和网页采集器收录的方法汇总

来源:脚本之家 http://www.jb51.net/yunying/28470.html 下面的这些方法是可以标本兼治的:1.限制IP地址单位时间的访问次数 分析:没有哪个常人一秒钟内能访问相同网站5次,除非是程序访问,而有这种喜好的,就剩下搜索引擎爬虫和讨厌的采集器了. 弊端:一刀切,这同样会阻止搜索引擎对网站的收录 适用网站:不太依靠搜索引擎的网站 采集器会怎么做:减少单位时间的访问次数,减低采集效率 2.屏蔽ip 分析:通过后台计数器,记录来访者ip和访问频率,人为分析来访记录,屏蔽可

爬虫学习之下载韩寒博客

1.打开韩寒博客列表页面 http://blog.sina.com.cn/s/articlelist_1191258123_0_1.html 目标是获取所有文章的超级链接 2.韩寒文章列表特征 <a title target... href=....html> 3.技术要点 ·字符串函数find ·列表 list[-x:-y] ·文件读写 #coding:utf-8 import urllib import time url = ['']*350 page = 1 link = 1 while

爬虫学习——URL管理器和实现方法

url管理器一共有三种实现方法,作为个人,我们应当选择哪种实现方法呢?答案就在下面 爬虫的简单架构 一.URL管理器 实现方式:有三种 1.内存中 python中set()可以直接去除重复的元素 2.关系数据库中 比如:mysql中的urls(url,is_crawled) 建立一个urls表包含两个字段url(待爬取)和is_crawled(已爬取). 3.缓存数据库 比如:redis 本身就包含set关系型数据结构 缓存数据库具有高性能:大公司首选 个人和小公司可用python内存作为存储,

爬虫5 html下载器 html_downloader.py

#coding:utf8 import urllib2 __author__ = 'wang' class HtmlDownloader(object): def download(self, url): if url is None: return None response = urllib2.urlopen(url) if response.getcode() != 200: return None return response.read()