Python爬虫入门之Urllib库的基本使用

  那么接下来,小伙伴们就一起和我真正迈向我们的爬虫之路吧。

1.分分钟扒一个网页下来

  怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它是一段HTML代码,加 JS、CSS,如果把网页比作一个人,那么HTML便是他的骨架,JS便是他的肌肉,CSS便是它的衣服。所以最重要的部分是存在于HTML中的,下面我们就写个例子来扒一个网页下来。

1 import urllib2
2 
3 response=urllib2.urlopen("http://www.baidu.com")
4 print(response.read())

2.分析扒网页的方法

  那么我们来分析这两行代码,第一行

1 response = urllib2.urlopen("http://www.baidu.com")

   首先我们调用的是urllib2库里面的urlopen方法,传入一个URL,这个网址是百度首页,协议是HTTP协议,当然你也可以把HTTP换做FTP,FILE,HTTPS 等等,只是代表了一种访问控制协议,urlopen一般接受三个参数,它的参数如下:

1 urlopen(url, data, timeout)

  第一个参数url即为URL,第二个参数data是访问URL时要传送的数据,第三个timeout是设置超时时间。

  第二三个参数是可以不传送的,data默认为空None,timeout默认为 socket._GLOBAL_DEFAULT_TIMEOUT

  第一个参数URL是必须要传送的,在这个例子里面我们传送了百度的URL,执行urlopen方法之后,返回一个response对象,返回信息便保存在这里面。

1 print response.read()

  response对象有一个read方法,可以返回获取到的网页内容。

  如果不加read直接打印会是什么?答案如下:

1 <addinfourl at 139728495260376 whose fp = <socket._fileobject object at 0x7f1513fb3ad0>>

  直接打印出了该对象的描述,所以记得一定要加read方法,否则它不出来内容可就不怪我咯!

3.构造Requset

  其实上面的urlopen参数可以传入一个request请求,它其实就是一个Request类的实例,构造时需要传入Url,Data等等的内容。比如上面的两行代码,我们可以这么改写

1 import urllib2
2 
3 request = urllib2.Request("http://www.baidu.com")
4 response = urllib2.urlopen(request)
5 print response.read()

   运行结果是完全一样的,只不过中间多了一个request对象,推荐大家这么写,因为在构建请求时还需要加入好多内容,通过构建一个request,服务器响应请求得到应答,这样显得逻辑上清晰明确。

4.POST和GET数据传送

  上面的程序演示了最基本的网页抓取,不过,现在大多数网站都是动态网页,需要你动态地传递参数给它,它做出对应的响应。所以,在访问时,我们需要传递数据给它。最常见的情况是什么?对了,就是登录注册的时候呀。

  把数据用户名和密码传送到一个URL,然后你得到服务器处理之后的响应,这个该怎么办?下面让我来为小伙伴们揭晓吧!

  数据传送分为POST和GET两种方式,两种方式有什么区别呢?

  最重要的区别是GET方式是直接以链接形式访问,链接中包含了所有的参数,当然如果包含了密码的话是一种不安全的选择,不过你可以直观地看到自己提交了什么内容。POST则不会在网址上显示所有的参数,不过如果你想直接查看提交了什么就不太方便了,大家可以酌情选择。

  POST方式:

  上面我们说了data参数是干嘛的?对了,它就是用在这里的,我们传送的数据就是这个参数data,下面演示一下POST方式。

1 import urllib
2 import urllib2
3 
4 values = {"username":"1016903103@qq.com","password":"XXXX"}
5 data = urllib.urlencode(values) 
6 url = "https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"
7 request = urllib2.Request(url,data)
8 response = urllib2.urlopen(request)
9 print response.read()

  我们引入了urllib库,现在我们模拟登陆CSDN,当然上述代码可能登陆不进去,因为CSDN还有个流水号的字段,没有设置全,比较复杂在这里就不写上去了,在此只是说明登录的原理。一般的登录网站一般是这种写法。

  我们需要定义一个字典,名字为values,参数我设置了username和password,下面利用urllib的urlencode方法将字典编码,命名为data,构建request时传入两个参数,url和data,运行程序,返回的便是POST后呈现的页面内容。

  注意上面字典的定义方式还有一种,下面的写法是等价的

 1 import urllib
 2 import urllib2
 3 
 4 values = {}
 5 values['username'] = "1016903103@qq.com"
 6 values['password'] = "XXXX"
 7 data = urllib.urlencode(values) 
 8 url = "http://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"
 9 request = urllib2.Request(url,data)
10 response = urllib2.urlopen(request)
11 print response.read()

   以上方法便实现了POST方式的传送

  GET方式:

  至于GET方式我们可以直接把参数写到网址上面,直接构建一个带参数的URL出来即可。

 1 import urllib
 2 import urllib2
 3 
 4 values={}
 5 values['username'] = "1016903103@qq.com"
 6 values['password']="XXXX"
 7 data = urllib.urlencode(values) 
 8 url = "http://passport.csdn.net/account/login"
 9 geturl = url + "?"+data
10 request = urllib2.Request(geturl)
11 response = urllib2.urlopen(request)
12 print response.read()

  你可以print geturl,打印输出一下url,发现其实就是原来的url加?然后加编码后的参数

1 http://passport.csdn.net/account/login?username=1016903103%40qq.com&password=XXXX

  和我们平常GET访问方式一模一样,这样就实现了数据的GET方式传送。

  本节讲解了一些基本使用,可以抓取到一些基本的网页信息,小伙伴们加油!

  转载整理自:静觅 » Python爬虫入门三之Urllib库的基本使用,感谢版主的分享。

转载于:https://www.cnblogs.com/AlwaysWIN/p/6236748.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python】hashlib.shasha256练习注册 --笔记

用户注册和登录import csv import hashlib#注册将用户信息填写到csv文件中 def register():username input(用户名:)password input(密码:)user []user.append(username)user.append(hashlib.sha256(password.encode(utf-8)).hexdigest())with open(t2/users.csv, a, newlin…

《3ds Max疯狂设计学院》——1.6节3ds Max 2016新增的主要功能

本节书摘来自异步社区《3ds Max疯狂设计学院》一书中的第1章&#xff0c;第1.6节3ds Max 2016新增的主要功能&#xff0c;作者 曹茂鹏&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 1.6 3ds Max 2016新增的主要功能1&#xff0e;Max Creation Graph3ds Max…

大数据之Kafka内部原理详细介绍

目录前言&#xff1a;1、Kafka整体结构2、Consumer与topic关系3、Kafka消息的分发4、Consumer的负载均衡5、kafka文件存储机制总结&#xff1a; 目录 前言&#xff1a; 本篇文章所介绍的内容还是以了解为主&#xff0c;主要目的还是为了对Kafka有一个更深入的理解。主要介绍…

【python】urllib和urllib3,requests 简要概括---笔记

urllib和urllib3&#xff0c;requestsurl:协议://存放资源的地址&#xff08;域名&#xff09;/具体的资源https://bj.lianjia.com/zufang/dghfjhsjdf648.htmlurllib.request 用来发出请求urllib.parseurllib.request.urlopen(str) --->response对象request urllib.reques…

JS与APP原生控件交互

“热更新”、“热部署”相信对于混合式开发的童鞋一定不陌生&#xff0c;那么APP怎么避免每次升级都要在APP应用商店发布呢&#xff1f;这里就用到了混合式开发的概念&#xff0c;对于电商网站尤其显得重要&#xff0c;不可能每次发布一个活动&#xff0c;都要发布一个现版本&a…

《脱颖而出——成功网店经营之道》一2.6 连横:返利模式的应用及分销

本节书摘来异步社区《脱颖而出——成功网店经营之道》一书中的第2章&#xff0c;第2.6节&#xff0c;作者&#xff1a; 何小健 责编&#xff1a; 赵轩, 更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.6 连横&#xff1a;返利模式的应用及分销 脱颖而出——成功网店…

【python】os模块 递归删除文件夹所有文件 --笔记

os.environ 获取系统的环境变量 os.name nt -- windows \r\n | posix --- Linux \nos.path: import osprint(os.environ) print(os.environ[OS])print(os.path.abspath(t1/file01.py)) # 获取绝对路径 print(os.path.isabs(t1/file01.py)) # 判断所给的路径是否是一个绝对…

大数据之Spark集群安装及简单使用

目录1、Spark集群安装1.1. 安装 2、启动Spark Shell2.1、启动spark shell2.2、在spark shell中编写WordCount程序 目录 1、Spark集群安装 1.1. 安装 1.1.1. 机器部署 准备两台以上Linux服务器&#xff0c;安装好JDK1.7 1.1.2. 下载Spark安装包 下载地址&#xff1a;ht…

《C和C++代码精粹》——1.7 类型安全I/O

本节书摘来自异步社区出版社《C和C代码精粹》一书中的第1章第1.7节&#xff0c;作者&#xff1a; 【美】Chuck Allison&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.7 类型安全I/O C和C代码精粹当然每个C程序员都曾经使用过printf的错误格式描述符号。…

大数据之Spark简介及RDD说明

目录前言&#xff1a;1、Spark概述1.1、什么是Spark&#xff08;官网&#xff1a;http://spark.apache.org&#xff09;1.2、为什么要学Spark1.3、Spark特点 2、RDD概述2.1、什么是RDD2.2、RDD的属性2.3、创建RDD的两种方式2.4、RDD编程API2.5、RDD的依赖关系2.6、RDD的缓存2.7…

Python3中urlopen()详解

一. 简介 urllib.request.urlopen()函数用于实现对目标url的访问。 函数原型如下&#xff1a;urllib.request.urlopen(url, dataNone, [timeout, ]*, cafileNone, capathNone, cadefaultFalse, contextNone)  url: 需要打开的网址 data&#xff1a;Post提交的数据 timeo…

python面向对象实现简易银行管理员页面系统

银行管理员页面系统设计:card 类&#xff1a; cardId password moneyuser 类: username phone id cards[]银行的工作人员: 账号 密码 登录 展现管理系统所有功能Bank类:开户取钱存钱转账销户查账解锁... import pickle import random# 银行卡 import time#card 类…

单子模式

package test; class aceing { /** param args */ private static aceing ace; public aceing() { super(); System.out.println("aceing类中的无参构造器调用了"); } public static aceing getAceing() { if(ace null) { ace new aceing(); } return ace; }} pack…

《塑造互联网思维的企业》一一第4章 全球商务向社会化媒体的转变

第4章 全球商务向社会化媒体的转变 塑造互联网思维的企业社会化媒体在发达国家的广泛采用已是我们所熟知的&#xff0c;它在社会和全球文化产生的大范围变革中至关重要。为了完全了解其中的原因&#xff0c;有必要探究一下那些推动社会化商务的复杂且相互关联的因素的共同影响…

大数据之SparkSQL简介及DataFrame的使用

目录前言&#xff1a;1、Spark SQL1.1、Spark SQL概述1.2、DataFrames1.3、DataFrame常用操作 总结&#xff1a; 目录 前言&#xff1a; 本文主要介绍下SparkSQL以及SparkSQL的简单使用。这里只是做了一个非常简单的介绍&#xff0c;后续工作中如果有用到相关的知识&#xff…

python的各种推导式(列表推导式、字典推导式、集合推导式)

python的各种推导式&#xff08;列表推导式、字典推导式、集合推导式&#xff09; 推导式comprehensions&#xff08;又称解析式&#xff09;&#xff0c;是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体。 共有三种推导&#xff0c;在Pyt…

原生js实现jquery库中选择器的功能(jquery库封装一)

今天是2017.1.1&#xff0c;新的一天&#xff0c;新的一年&#xff0c;新的一年里继续夯实基础知识&#xff0c;在工作中多些项目&#xff0c;多思考&#xff0c;多总结&#xff0c;前端是不断更新&#xff0c;在更新的过程中也是发现乐趣和挑战自我的过程&#xff0c;希望年轻…

Ubantu下使用vi时,方向键变字母输出、退格键无法删除字符的解决办法

目录前言&#xff1a;一、编辑/etc/vim/vimrc.tiny二、安装vim full版本三、添加”.vimrc”文件 目录 前言&#xff1a; 最近由于要玩TensorFlow&#xff0c;所以把尘封已久的Ubantu给打开了&#xff0c;不过配置网络的时候&#xff0c;算是一团糟&#xff0c;出现了在插入模…

《Python爬虫开发与项目实战》——第3章 初识网络爬虫 3.1 网络爬虫概述

本节书摘来自华章计算机《Python爬虫开发与项目实战》一书中的第3章&#xff0c;第3.1节&#xff0c;作者&#xff1a;范传辉著&#xff0c;更多章节内容可以访问云栖社区“华章计算机”公众号查看 第3章 初识网络爬虫 从本章开始&#xff0c;将正式涉及Python爬虫的开发。本章…

【python】解决:TypeError: can't send non-None value to a just-started generator

在一个生成器函数未启动之前&#xff0c;是不能传递数值进去。必须先传递一个None进去或者调用一次next(g)方法&#xff0c;才能进行传值操作 def product(c):# c.send(None)for i in range(5):print("生产者产生数据%d"%i)r c.send(str(i))print("消费者消费了…