1 request模块:用于打开和读取 URL。

使用urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None, capath=None, cadefault=False, context=None)方法便可以简单地把网页抓取下来。

import urllib.request
import sslssl._create_default_https_context = ssl._create_unverified_context
response = urllib.request.urlopen('https://www.baidu.com')
print(response.status)

正常run完代码以后,会打印出访问成功的状态码,也就是200。

(PS:ssl._create_default_https_context = ssl._create_unverified_context 这是为了全局取消证书验证。因为在python2.7.9之后每当urllib.urlopen请求一个https 的链接的时候,都会验证一次SSL证书。详细解析请看https://blog.csdn.net/moonhillcity/article/details/52767999。)

返回的response是一个HTTPResponse类型的对象。

(关于HTTPResponse类型的对象,在python官方文档里面介绍得很详细感兴趣的可以去看一下。https://docs.python.org/3/library/http.client.html)

除了必传参数‘url’以外,我们还有data,timeout,context,cafile,capath,cadefault这些参数。

data用于设置请求需要的参数。

timeout用于设置超时时间。

context用于SSL的设置,所以context里面接收的参数一定是ssl.SSLContext类型。

cafile和capath分别指定了CA证书和它的路径。

cadefault被弃用了,所以我们默认传False值。

2 parse模块:用于url的解析,合并,编码,解码 。

from urllib.parse import urlparse
o = urlparse('http://www.cwi.nl:80/%7Eguido/Python.html?data=data')
​print(o)

使用urllib.parse.urlparse(urlstring,scheme ='',allow_fragments = True )方法把URL解析成为6个部分。

使用urllib.parse.urlunparse(parts)方法可以还原urllib.parse.urlparse分解出来的元组,使其从新拼接成为一个URL。

使用

urllib.parse.parse_qs(qs,keep_blank_values = False,strict_parsing = False,encoding ='utf-8',errors ='replace',max_num_fields = None )

方法解析URL查询模块query的参数,并返回字典。

使用

urllib.parse.parse_qsl(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace', max_num_fields=None)

方法解析URL查询模块query的参数,并返回列表。

import urllib.parse
​
url = "https://www.baidu.com?query=param"
url_change = urllib.parse.urlparse(url)
query = url_change.query
lst_query = urllib.parse.parse_qsl(query)
dict_query = urllib.parse.parse_qs(query)
print("使用parse_qsl返回列表  :", lst_query)
print("使用parse_qs返回字典   : ", dict_query)

urllib.parse.urlsplit(urlstring, scheme='', allow_fragments=True)方法和urllib.parse.urlparse方法的用法一致,和urllib.parse.urlparse不一样的地方在于urllib.parse.urlsplit方法没有params了。

使用urllib.parse.urlunsplit(parts)方法还原urllib.parse.urlsplit方法所解析的URL。

urllib.parse.urljoin(base, url, allow_fragments=True)方法用于URL的拼接。

import urllib.parse
print(urllib.parse.urljoin("https://www.baidu.com/hello.html","world.html"))

urllib.parse.urldefrag(url)方法用于识别fragment。

import urllib.parse
print(urllib.parse.urldefrag("http://www.baidu.com?query=arg#frag"))

urllib.parse.unwrap(url)方法用于把包装好的URL解析成普通的URL。(<URL:type://host/path> --> 'type://host/path')

import urllib.parse
print(urllib.parse.unwrap("<URL:http://www.baidu.com/2020/01/index.html>"))

3 error模块:定义了由request所引发的异常,而URLError是error模块的基础异常类。

import urllib.request
import urllib.error
import ssl
​
ssl._create_default_https_context = ssl._create_unverified_context
try:res = urllib.request.urlopen('https://yichang.com/index.htm')
except urllib.error.URLError as e:print(e.reason)print(e.code)print(e.headers)

URLError类主要有reason错误原因,code状态码和headers请求头3个属性组成。

4 robotparser 模块:主要用于robots.txt的分析。

robots.txt简单地说,就是记录一个网站的哪些地方可以被爬虫爬,哪些地方不能被爬的一个文档。

import urllib.robotparser
​
rp = urllib.robotparser.RobotFileParser()
rp.set_url("http://www.musi-cal.com/robots.txt")
rp.read()
rrate = rp.request_rate("*")
rrate.requests
rrate.seconds
rp.crawl_delay("*")
rp.can_fetch("*", "http://www.musi-cal.com/cgi-bin/search?city=San+Francisco")
rp.can_fetch("*", "http://www.musi-cal.com/")

set_url(url)方法用于设置指向 robots.txt 文件的 URL。

read()方法用于读取 robots.txt URL 并将其输入解析器。

parse(lines)方法用于解析行参数。

can_fetch(useragent, url)方法用于如果允许 useragent 按照被解析 robots.txt 文件中的规则来获取 url 则返回 True。

mtime()方法用于返回最近一次获取 robots.txt 文件的时间。这适用于需要定期检查 robots.txt 文件更新情况的长时间运行的网页爬虫。

modified()方法用于将最近一次获取 robots.txt 文件的时间设置为当前时间。

crawl_delay(useragent)方法用于为指定的 useragent 从 robots.txt 返回 Crawl-delay 形参。如果此形参不存在或不适用于指定的 useragent 或者此形参的 robots.txt 条目存在语法错误,则返回 None。

request_rate(useragent)方法用于以 named tuple RequestRate(requests, seconds) 的形式从 robots.txt 返回 Request-rate 形参的内容。如果此形参不存在或不适用于指定的 useragent 或者此形参的 robots.txt 条目存在语法错误,则返回 None。

site_maps()方法用于以 list() 的形式从 robots.txt 返回 Sitemap 形参的内容。如果此形参不存在或者此形参的 robots.txt 条目存在语法错误,则返回 None。

python url拼接_python学习笔记——urllib篇相关推荐

  1. python tkinter 表格_python学习笔记(Tkinter编程利用Treeview实现表格自动更新)

    博主今天总结这段时间抽空写的一个GUI编程项目 功能是查看本地打印机队列,可选择指定队列重新打印 直接上图 UI设计包括3个区域左上方,右上方和下方列表区域 使用网格grid方法来分配位置 下面是界面 ...

  2. python 坐标轴 单位刻度_Python学习笔记(matplotlib篇)--坐标轴刻度

    python学习笔记--坐标轴刻度 所用的库及环境: ide:pycharm python环境:python3.7 matplotlib:   matplotlib 1.11 numpy:  nump ...

  3. python编程计算器_Python学习笔记:用Python开发一个计算器项目

    最近抽空看了下python的学习文档,发现开发工具以及资料支持对开发者相当的友好,相比之下,以前用TCL&Tk做的项目主要缺点有两个:1,开发难度大,调试手段只有靠print一种,而且语法错误 ...

  4. python pow和**_Python学习笔记 | 实例3:天天向上的力量

    本文为中国大学MOOC<Python语言程序设计>课程学习笔记,课程主讲:嵩天老师,练习平台:Python123,参考教材:<Python语言程序设计基础> 天天向上的力量 加 ...

  5. python eval 入门_Python学习笔记整理3之输入输出、python eval函数

    Python学习笔记整理3之输入输出.python eval函数 来源:中文源码网    浏览: 次    日期:2018年9月2日 Python学习笔记整理3之输入输出.python eval函数 ...

  6. python分组求和_Python学习笔记之pandas索引列、过滤、分组、求和功能示例

    本文实例讲述了Python学习笔记之pandas索引列.过滤.分组.求和功能.分享给大家供大家参考,具体如下: 前面我们已经把519961(基金编码)这种基金的历史净值明细表html内容抓取到了本地, ...

  7. python图形设置_python学习笔记——基本图形绘制

    1.python蟒蛇python蟒蛇代码 #PythonDraw.py import turtle turtle.setup(650,350,200,200)# 设置画布的长.宽.起点 turtle. ...

  8. python dict遍历_Python学习笔记:19个pythonic编程习惯,让你的Python入门更优雅

    Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净.整洁.一目了然. 要写出 Pythonic(优雅的.地道的.整洁的)代码,需要多看多学大牛们写的代码,github 上有很多非常优 ...

  9. python通信信号处理_python学习笔记——信号模块signal(示例代码)

    基于python学习笔记--多进程间通信--Linux信号基础的学习基础,进一步学习Python标准库中的signal模块. 尽管signal是python中的模块,但是主要针对UNIX平台(比如Li ...

最新文章

  1. 第三篇:时间和全局状态(三)
  2. How can I pretty-print JSON in python?
  3. 如何在Unity中播放影片
  4. 如何从一个表中选择另一个表中不存在的所有记录?
  5. 介绍一下Objective-c常用的函数,常数变量
  6. 治标不治本:POI Ptg错误的解决方法
  7. C++极值minmax最大值最小值算法(附完整源码)
  8. 设单链表中存放n个字符,试设计一个算法,使用栈推断该字符串是否中心对称...
  9. Flask爱家租房--celery(总结)
  10. 苹果CMS v10一键采集芒果tv官方直链地址插件
  11. springboot整合jpa_SpringBoot与SpringDataJPA整合 Ehcache
  12. UVA 188 Perfect Hash
  13. pca主成分分析结果解释_主成分分析(PCA)原理精讲 | 统计学专题
  14. numpy版本过高的解决方案
  15. 如何获取百度文库中的文章【原创】
  16. Linux安装redis数据库
  17. 易宝支付 CTO 陈斌:如何做一个好的 CTO
  18. 怎么将多张图片打印在一张A4纸上?
  19. latex中求和符号的条件的换行处理
  20. 2019上半年软件设计师 下午真题-简答题及免费答案(一)

热门文章

  1. 包过滤防火墙和代理应用防火墙
  2. PowerMock介绍
  3. 拥抱新技术的一点思考
  4. HDU 1520Anniversary party(树型DP)
  5. Oracle技术之ASM上恢复STANDBY数据库出现ORA-15173错误
  6. index 生成创建index的脚本
  7. 利用用户级线程提高多线程应用的性能
  8. 老师傅告诉你,学校学的编程知识,和工作所需要的差别有多大!
  9. 免费语音软件可以导入你在飞鸽传书2008
  10. 剖析三大个人IM工具安全隐患