Python网络爬虫(二)
Urllib库之解析链接
Urllib库里有一个parse这个模块,定义了处理URL的标准接口,实现 URL 各部分的抽取,合并以及链接转换。它支持如下协议的 URL 处理:file、ftp、gopher、hdl、http、https、imap、mailto、 mms、news、nntp、prospero、rsync、rtsp、rtspu、sftp、shttp、 sip、sips、snews、svn、svn+ssh、telnet、wais。
urlparse()
from urllib.parse import urlparse
result = urlparse('http://www.baidu.com/index.html;user?id=5#comment')
print(type(result), result)
urlparse的函数格式为:urllib.parse.urlparse(urlstring, scheme='', allow_fragments=True)
输出的结果为:
<class 'urllib.parse.ParseResult'>
ParseResult(scheme='http', netloc='www.baidu.com', path='/index.html', params='user', query='id=5', fragment='comment')
返回的结果将我们提供的链接http://www.baidu.com/index.html;user?id=5#comment拆分成了6部分:scheme、netloc、path、params、query、fragment。所以我们可以得知一般的标准的链接格式:scheme://netloc/path;parameters?query#fragment
urlunparse()
接收的参数必须是一般url能拆分的6部分(长度必须为6,否则会抛出参数数量不足的问题)。这个函数的意思就是将拆分的6部分结合在一起成为一个完整的url。
urlsplit()
和 urlparse() 方法非常相似,只不过它不会单独解析 parameters 这一部分,只返回五个结果,即 parameters 会合并到 path中。
urlunsplit()
与 urlunparse() 类似,也是将链接的各个部分组合成完整链接的方法,传入的也是一个可迭代对象,例如列表、元组等等,唯一的区别是,长度必须为 5。
urljoin()
uelunparse()与urlunsplit()方法都是限定了参数的链接合并,但其实我们可以利用urljoin(),这也是爬虫中最常用的方式。首先定义一个base_url,再定义一个新的参数作为完整链接的剩余部分。base_url 提供了三项内容,scheme、netloc、path,如果这三项在新的链接里面不存在,那么就予以补充,如果新的链接存在,那么就使用新的链接的部分。base_url 中的 parameters、query、fragments 是不起作用的。举个例子base_url=‘https://www.baidu.com’,如果新的参数为'?q=hh',那么urljoin()之后就是‘https://www.baidu.com?q=hh’。如果新的参数为一个链接形式'www.baidu.com?category=2#comment',那么最后形成的连接形式就为新的链接而忽略了base_url。
urlencode()
个常用的 urlencode() 方法,它在构造 GET 请求参数的时候非常有用。
from urllib.parse import urlencode
params = {
'name': 'germey',
'age': 22
}
base_url = 'http://www.baidu.com?'
url = base_url + urlencode(params)
print(url)
首先声明了一个字典,将参数表示出来,然后调用 urlencode() 方法将其序列化为 URL 标准 GET 请求参数。
得到的结果为:
http://www.baidu.com?name=germey&age=22
parse_qs()
有了序列化必然就有反序列化,如果我们有一串 GET 请求参数,我们利用 parse_qs() 方法就可以将它转回字典
parse_qsl()
与parse_qs()的功能是类似的,只不过是将参数转化为元组组成的列表。
quote()
quote() 方法可以将内容转化为 URL 编码的格式,有时候 URL 中带有中文参数的时候可能导致乱码的问题,所以我们可以用这个方法将中文字符转化为 URL 编码:。注意观察网址的时候会发现,有些网站之后会有很长一串的字母符号数字混合组成的字符串,这有可能是加密后的编码,也有可能是URL编码的转换,举个例子:
from urllib.parse import quote
keyword = '壁纸'
url = 'https://www.baidu.com/s?wd=' + quote(keyword)
print(url)
得出的结果为:
https://www.baidu.com/s?wd=%E5%A3%81%E7%BA%B8
unquote()
可以进行URL解码。
Python网络爬虫(二)的更多相关文章
- 【Python网络爬虫二】使用urllib2抓去网页内容
在Python中通过导入urllib2组件,来完成网页的抓取工作.在python3.x中被改为urllib.request. 爬取具体的过程类似于使用程序模拟IE浏览器的功能,把URL作为HTTP请求 ...
- python网络爬虫之自动化测试工具selenium[二]
目录 前言 一.获取今日头条的评论信息(request请求获取json) 1.分析数据 2.获取数据 二.获取今日头条的评论信息(selenium请求获取) 1.分析数据 2.获取数据 房源案例(仅供 ...
- python 网络爬虫(二) BFS不断抓URL并放到文件中
上一篇的python 网络爬虫(一) 简单demo 还不能叫爬虫,只能说基础吧,因为它没有自动化抓链接的功能. 本篇追加如下功能: [1]广度优先搜索不断抓URL,直到队列为空 [2]把所有的URL写 ...
- python 网络爬虫(二)
一.编写第一个网络爬虫 为了抓取网站,我们需要下载含有感兴趣的网页,该过程一般被称为爬取(crawling).爬取一个网站有多种方法,而选择哪种方法更加合适,则取决于目标网站的结构. 首先探讨如何安全 ...
- Python网络爬虫
http://blog.csdn.net/pi9nc/article/details/9734437 一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛 ...
- Python网络爬虫笔记(五):下载、分析京东P20销售数据
(一) 分析网页 下载下面这个链接的销售数据 https://item.jd.com/6733026.html#comment 1. 翻页的时候,谷歌F12的Network页签可以看到下面 ...
- 如何利用Python网络爬虫抓取微信朋友圈的动态(上)
今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...
- Python网络爬虫与如何爬取段子的项目实例
一.网络爬虫 Python爬虫开发工程师,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页 ...
- 【python网络爬虫】之requests相关模块
python网络爬虫的学习第一步 [python网络爬虫]之0 爬虫与反扒 [python网络爬虫]之一 简单介绍 [python网络爬虫]之二 python uillib库 [python网络爬虫] ...
随机推荐
- Gym - 100851G:Generators(人尽皆知但是WA题)
题意:现在有函数,每一项Xi=(A*X(i-1)+B)%C.现在给定N个函数以及K:X0,A,B,C.然你再每个函数选择一个数,使得其和最大,而且不被K整除. X0,A,B,C<=1e3 :K& ...
- ACM学习历程—POJ 3764 The xor-longest Path(xor && 字典树 && 贪心)
题目链接:http://poj.org/problem?id=3764 题目大意是在树上求一条路径,使得xor和最大. 由于是在树上,所以两个结点之间应有唯一路径. 而xor(u, v) = xor( ...
- 【LeetCode】060. Permutation Sequence
题目: The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of t ...
- 创建Azure Blob Snapshot的脚本
在前面的文章中介绍了如何创建Azure Blob Snapshot.那篇文章中创建的脚本思路是:遍历所有Storage Account,找到所有vhd文件,进行Snapshot的创建. 但这种方式不够 ...
- UDK编辑器 49条小提示
转自:http://www.cnblogs.com/hmxp8/archive/2012/02/09/2343674.html Very Helpful~ 01. First time using t ...
- 问题:MSChart.exe;结果:微软图表控件MsChart使用方法及各种插件下载地址
微软图表控件MsChart使用方法及各种插件下载地址 (2012-08-10 17:32:33) 转载▼ 标签: 图表 控件 下载地址 kernel32 微软 it 分类: C# 昨天在网上看到了微软 ...
- shell判断网络主机存活
判断网络主机存活企业面试题4:写一个脚本,实现判断10.0.0.0/24网络里,当前在线用户的IP有哪些(方法有很多) #!/bin/sh#[ -f /etc/init.d/functions ] & ...
- IPC编程之消息队列
本地的进程间通信(IPC)有很多种方式,但可以总结为下面3类: 1.消息传递(管道.FIFO.消息队列) 2.同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 3.共享内存(匿名的和具名的) ...
- 关于JAVA中的回调接口传值机制
详见博文http://blog.csdn.net/xiaanming/article/details/8703708
- [51nod1270] 数组的最大代价(简单dp)
解题关键:先由贪心的思想得出任何一个位置只能取1或者a[i],然后dp即可. #include<bits/stdc++.h> using namespace std; typedef lo ...