惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
Jina AI
Jina AI
IT之家
IT之家
J
Java Code Geeks
博客园_首页
Stack Overflow Blog
Stack Overflow Blog
量子位
I
InfoQ
博客园 - 【当耐特】
阮一峰的网络日志
阮一峰的网络日志
WordPress大学
WordPress大学
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 司徒正美
V
V2EX
博客园 - Franky
U
Unit 42
S
SegmentFault 最新的问题
美团技术团队
The Register - Security
The Register - Security
Last Week in AI
Last Week in AI
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
博客园 - 叶小钗
M
MIT News - Artificial intelligence
博客园 - 聂微东
腾讯CDC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Troy Hunt's Blog
B
Blog
P
Palo Alto Networks Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy International News Feed
K
Kaspersky official blog
The GitHub Blog
The GitHub Blog
C
Cisco Blogs
Microsoft Azure Blog
Microsoft Azure Blog
F
Fortinet All Blogs
S
Schneier on Security
C
CERT Recently Published Vulnerability Notes
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Engineering at Meta
Engineering at Meta
TaoSecurity Blog
TaoSecurity Blog
小众软件
小众软件
T
Threatpost
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Martin Fowler
Martin Fowler
AWS News Blog
AWS News Blog
V
Visual Studio Blog
Simon Willison's Weblog
Simon Willison's Weblog
H
Heimdal Security Blog

博客园 - 甩掉裤衩凭风吹

Go学习例子(六) Go学习例子(五) Go学习例子(四) Go学习例子(三) Go学习例子(二) Go学习例子(一) 一、Python基础语法 Python爬虫实战一之爬取糗事百科段子 Python爬虫系列:五、正则表达式 Python爬虫系列:四、Cookie的使用 python爬虫系列:三、URLError异常处理 python系列:二、Urllib库的高级用法 二十七、mysql如何确保数据不丢失?有几点值得我们借鉴 二十六、聊聊mysql如何实现分布式锁 二十五、sql中where条件在数据库中提取与应用浅析 二十四、如何正确的使用索引? 二十三、mysql索引管理详解 二十二、mysql索引原理详解 二十一、什么是索引?
python系列:一、Urllib库的基本使用
甩掉裤衩凭风吹 · 2019-12-03 · via 博客园 - 甩掉裤衩凭风吹

开篇介绍:

  因为我本人也是初学者,爬虫的例子大部分都是学习资料上面来的,只是自己手敲了一遍,同时加上自己的理解。

  写得不好请多谅解,如果有错误之处请多赐教。

  我本人的开发环境是vscode,pythong为3.6版本。

  准备好了吗?我们从例子开始吧。

1、扒一个网页下来

  

  是的,你没有看错,上面的代码就能爬百度首页,核心代码就一句:urllib.request.urlopen('http://www.baidu.com')

2.分析扒网页的方法

  我们重点来看看这行代码:urllib.request.urlopen("http://www.baidu.com").

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

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

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

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

  第二行代码:f.read()。response对象有一个read方法,可以返回获取到的网页内容。

3、POST和GET数据传送

  上面的程序演示了最基本的网页抓取,不过,现在大多数网站都是动态网页,需要你动态地传递参数给它,它做出对应的响应。所以,在访问时,我们需要传递数据给它。  

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

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

  POST方式:  

  

  友情提示:如果报错urllib.error.HTTPError: HTTP Error 405:    原因:请求协议问题     解决:将http 改成https试试。

  里面的json也可以写成:

    values = {}

    values['username'] = "1016903103@qq.com"

    values['password'] = "XXXX"

  GET方式:

  

本章讲解了一些基本使用,可以抓取到一些基本的网页信息。

源码如下:

 1 # _*_ coding:utf-8 _*_ 
 2 import urllib.request 
 3  
 4  
 5 def run_demo():
 6     f=urllib.request.urlopen('http://www.baidu.com')
 7     print(f.read()) 
 8 
 9 if __name__=='__main__':
10     run_demo()
11  
12 '''
13 # _*_ coding:utf-8 _*_ 
14 from urllib import request
15 from urllib import parse
16 from urllib.request import urlopen
17 
18 values = {'username': 'biao1603@qq.com', 'password': 'biao1603@qq.com'}
19 data = parse.urlencode(values).encode('utf-8')  # 提交类型不能为str,需要为byte类型
20 url = 'http://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn'
21 request = request.Request(url, data)
22 response = urlopen(request)
23 print(response.read().decode())
24 
25 # _*_ coding:utf-8 _*_ 
26 from urllib import request
27 from urllib import parse
28 from urllib.request import urlopen
29 
30 values={}
31 values['username'] = "biao1603@qq.com"
32 values['password']="biao1603@qq.com"
33 data = parse.urlencode(values) 
34 url = "http://passport.csdn.net/account/login"
35 geturl = url + "?"+data
36 request = request.Request(geturl)
37 response = urlopen(request)
38 print(response.read().decode())
39 '''

View Code