爬虫基础之urllib库



categories:

  • 爬虫
    tags:
  • urlopen
  • urlretrieve
  • urlencode
  • parse_qs
  • urlparse
  • urlsplit

urllib库

urllib库是Python中一个最基本的网络请求库。可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据

urlopen函数

在Python3的urllib库中,所有和网络请求相关的方法,都被集到 urllib.request 模块下面了,先来看下urlopen的基本使用

from urllib import request
resp = request.urlopen('http://www.baidu.com')
print(resp.read())

实际上,使用浏览器访问百度,右键查看源代码。会发现,和打印出来的数据一样。

urlopen 解释

  1. url:请求和url
  2. data:请求的data,如果设置了值,那么将变成post请求
  3. 返回值:返回一个http.client.HTTPResponse对象,这个对象是一个类文件句柄对象。有read(size)、readline、readlines以及getcode等方法
#http.client.HTTPResponse
print(resp)
<http.client.HTTPResponse object at 0x7f6466e926a0>

#read(size)
print(resp(100))
b'<html>\n<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">\n</html>\n'

#readline()
print(resp.readline())
b'<html>\n'

#readlines()
print(resp.readlines())
[b'<html>\n', b'<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">\n', b'</html>\n']

#getcode()
print(resp.getcode())
200

urlretrieve函数

这个函数可以方便地将网页上一个文件保存到本地。以下代码可以非常方便地将百度的首页下载到本地

urlretrieve(下载地址,保存位置)

from urllib import request
request.urlretrieve('http://www.baidu.com','/tmp/tmp97mdqput')
#返回值 如下
('/tmp/tmp97mdqput', <http.client.HTTPMessage object at 0x7f6466e23400>)

urlencode函数

用浏览器发送请求时,如果url中包含了中文或其他特殊字符,浏览器会自动编码。如果使用代码发送请求,需手动编码,通过urlencode实现。urlencode可将字典转换为url编码格式的数据

from urllib import parse
data = {'name':'爬虫基础','greet':'hello world','age':10}
qs = parse.urlencode(data)
print(qs)
#返回值
name=%E7%88%AC%E8%99%AB%E5%9F%BA%E7%A1%80&greet=hello+world&age=10

模拟百度查询刘德华

错误方式

from urllib import request
url = 'http://www.baidu.com/s?wd=刘德华'
qs = request.urlopen(url)
print(qs)
#在执行request.urlopen(url)时,返回报错,原因是 ascii 解压器无法对'刘德华'进行编码
UnicodeEncodeError: 'ascii' codec can't encode characters in position 7-9: ordinal not in range(128)

正确方式

from urllib import request,parse
url = 'http://www.baidu.com/s?'
param = {"wd":"刘德华"}
url_param = parse.urlencode(param)
full_url = url + url_param
print(full_url)
qs = request.urlopen(full_url)
print(qs.readline()[:100])
#返回值
b'<!DOCTYPE html>\n'

parse_qs函数

可将经过编码的url参数进行解码

from urllib import parse
qs = 'name=%E7%88%AC%E8%99%AB%E5%9F%BA%E7%A1%80&greet=hello+world&age=10'
print(parse.parse_qs(qs))
#返回值
{'name': ['爬虫基础'], 'greet': ['hello world'], 'age': ['10']}

urlparse和urlsplit

有时候拿到一个url,想要对这个url进行分割,可以使用urlparse或者urlsplit

区别是urlsplit函数没有params属性

from urllib import request,parse
url = 'http://www.baidu.com/s?username=zhiliao'
#对比urlsplit,urlparse函数时,开启关闭注释
result = parse.urlsplit(url)
#result = parse.urlparse(url)

print(result)
#返回值如下
'''
urlsplit
SplitResult(scheme='http', netloc='www.baidu.com', path='/s', query='username=zhiliao', fragment='')
urlparse
ParseResult(scheme='http', netloc='www.baidu.com', path='/s', params='', query='username=zhiliao', fragment='')

'''
for i in result:
    print(i)

'''
********urlsplit*************
http
www.baidu.com
/s
username=zhiliao

**********urlparse***********
http
www.baidu.com
/s
                #此处空行对应params属性值,为''
username=zhiliao

'''

原文地址:https://www.cnblogs.com/anyux/p/12203091.html

时间: 2024-08-15 22:14:43

爬虫基础之urllib库的相关文章

爬虫基础(1):urllib库

urllib库 urllib库是python中的一个基本网络请求库.用于模拟浏览器的行为,向指定服务器发送请求,并接收返回的数据. 在python3中所有的网络请求相关函数都集中在urllib.request模块下面 urlopen函数 向服务器发起请求 urlopen函数的参数 url 目标地址 data 如果有这个参数,将变为post请求 返回值 http.client.HTTPResponse对象,其中含有下面几个方法: read(size) size为空则读取所有 readline()

第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号

第三百三十节,web爬虫讲解2-urllib库爬虫-实战爬取搜狗微信公众号 封装模块 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib from urllib import request import json import random import re import urllib.error def hq_html(hq_url): """ hq_html()封装的爬虫函数,自动启用了用户代理和ip

Python3网络爬虫——二、Urllib库的基本使用

一.什么是Urllib Urllib库是Python自带的一个http请求库,包含以下几个模块: urllib.request 请求模块 urllib.error   异常处理模块 urllib.parse   url解析模块 urllib.robotparser  robots.txt解析模块 其中前三个模块比较常用,第四个仅作了解. 二.Urllib方法介绍 将结合Urllib的官方文档进行说明.首先是urllib.request模块: urllib.request.urlopen(url,

Python爬虫入门之Urllib库的高级用法

1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览器,调试浏览器F12,我用的是Chrome,打开网络监听,示意如下,比如知乎,点登录之后,我们会发现登陆之后界面都变化了,出现一个新的界面,实质上这个页面包含了许许多多的内容,这些内容也不是一次性就加载完成的,实质上是执行了好多次请求,一般是首先请求HTML文件,然后加载JS,CSS 等等,经过多次

爬虫常用的 urllib 库知识点

urllib 库 urllib 库是 Python 中一个最基本的网络请求库.它可以模仿浏览器的行为向指定的服务器发送请求,同时可以保存服务器返回的数据. urlopen() 在 Python3 的 urllib 库中,所有和网络请求的相关方法都被集中到 urllib.request 模块下了.以下是 urlopen() 方法最基本的使用方法: from urllib import request resp = request.urlopen('https://www.baidu.com') p

爬虫(二):urllib库文件的基础和进阶(python2.7)

1 import urllib2 2 url="https//www.baidu.com"; 3 response=urllib2.urlopen(url); 4 print response.read()5 #************************************同样上面网页的代码可以通过request对象进行访问************ request=urllib2.Request(url) response=urllib2.urlopen(request) p

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

前言 所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地.在Python中有很多库可以用来抓取网页,我们先学习urllib. 注:此博客开发环境为python3 urlopen 我们先来段代码: # urllib_urlopen.py # 导入urllib.request import urllib.request # 向指定的url发送请求,并返回服务器响应的类文件对象 response = urllib.request.urlopen("http://www.bai

python爬虫二、Urllib库的基本使用

什么是Urllib Urllib是python内置的HTTP请求库 包括以下模块 urllib.request 请求模块 urllib.error 异常处理模块 urllib.parse url解析模块 urllib.robotparser robots.txt解析模块 urlopen 关于urllib.request.urlopen参数的介绍: urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=No

九 web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解

封装模块 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib from urllib import request import json import random import re import urllib.error def hq_html(hq_url): """ hq_html()封装的爬虫函数,自动启用了用户代理和ip代理 接收一个参数url,要爬取页面的url,返回html源码 "