python3网络爬虫开发实战

1. 开发环境配置

2. 爬虫基础

3. 基本库的使用

3.1使用urllib

  • request : 它是最基本的HTTP 请求模块,可以用来模拟发送请求。就像在浏览器里输入网址,然后回车一样,只需要给库方法传入URL 以及额外的参数,就可以模拟实现这个过程了。
  • error : 异常处理模块,如果出现请求错误, 我们可以捕获这些异常,然后进行重试或其他操作以保证程序不会意外终止。
  • parse : 一个工具模块,提供了许多URL 处理方法,比如拆分、解析、合并等。
  • robotparser :主要是用来识别网站的robots.txt 文件,然后判断哪些网站可以爬,哪些网站不可以爬,它其实用得比较少。

3.1.1 发送请求

1. urlopen()
import urllib.request
response= urllib.request.urlopen( ' https://www.python.org')
pri「1t(response. read(). decode (’ utf-8'))

urlopen()得到的是一个HTTPResposne 类型的对象,主要包含read() 、readinto ()、getheader(name )、getheaders () 、fileno ()等方法,以及msg 、version 、status 、reason 、debuglevel 、closed 等属性。

print(response . status)
print(response .getheaders())
print(response  . getheader (『Server'))

#输出
200
[('Server', 'Tengine'),
 ('Content-……096908924e')]
'Tengine'

API

urllib.request.urlopen(
    url,
    data=None,
    timeout=<object object at 0x000002C274D622D0>,
    *,
    cafile=None,
    capath=None,
    cadefault=False,
    context=None,
)

data参数

data 参数是可选的,如果它是字节流编码格式的内容,即bytes 类型,则需要通过bytes()方法转化。如果传递了这个参数,则它的请求方式就不再是GET 方式,而是POST 方式。

data = bytes(urllib.parse.urlencode({'word':'hello'}),encoding='utf8')
response= urllib.request.urlopen('http://httpbin.org/post',data)
print(response.read())

timeout参数

用于设置超时时间,单位为秒,如果请求超出了设置的这个时间, 还没有得到响应, 就会抛出异常

response= urllib.request.urlopen('http://httpbin.org/get',timeout=1)
print(response.read())

其他参数

参数作用
context必须是ssl.SSLContext 类型,用来指定SSL 设置
cafile指定CA 证书
capath指定CA 证书路径
2. Request
request = urllib.request.Request('https://creator.douyin.com/content/manage')
response = urllib.request.urlopen(request)
print(response.read().decode('utf-8'))

请求网页,得到Request类型的对象

API

urllib.request.Request(
    url,
    data=None,
    headers={},
    origin_req_host=None,
    unverifiable=False,
    method=None,
)
参数说明
url必传参数
data必须传bytes(字节流)类
headers一个字典,它就是请求头
origin_req_host请求方的host 名称或者IP 地址
origin_req_host请求方的host 名称或者IP 地址
unverifiable表示这个请求是否是无法验证的,默认是False ,意思就是说用户没有足够权限来选择接收这个请求的结果
method一个字符串,用来指示请求使用的方法
headers = {
    'User_Agent':'Mozilla/4.0(compatible;MSIE 5.5;Windows NT)',
    'Host':'httpbin.org'
}
dict = {'name':'Germey'}
data = bytes(parse.urlencode(dict),encoding='utf8')
req = request.Request(url,data,headers,method='POST')
response = request.urlopen(req)
print(response.read().decode('utf-8'))
3. 高级用法

Handler

说明
BaseHandler 类所有其他Handler 的父类,它提供了最基本的方法
HITPDefaultErrorHandler处理HTTP 响应错误,错误都会抛出HTTP Error 类型的异常
HTTPRedirectHandler处理重定向
HTTPCookieProcessor处理Cookies
ProxyHandler设置代理, 默认代理为空
HTTPPasswordMgr管理密码,它维护了用户名和密码的表
HTTPBasicAuthHandler管理认证,如果一个链接打开时需要认证,那么可以用它来解决认证问题

Opener

之前使用的Request 和urlopen( )相当于类库为你封装好了极其常用的请求方法,利用它们可以完成基本的请求

Opener 可以使用open()方法,返回的类型和urlopen()如出一辙

一般利用利用Handler来构建Opener

验证——HTTPBasicAuthHandler

from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_opener
from urllib.request import URLError

username = 'username'
password = 'password'
url = 'http://localhost:5000/'

p = HTTPPasswordMgrWithDefaultRealm()#实例化
p.add_password(None,url,username,password)#添加url及用户和密码
auth_handler = HTTPBasicAuthHandler(p)
opener = build_opener(auth_handler)

try:
    result = opener.open(url)
    html = result.read().decode('utf-8')
    print(html)
except URLError as e:
    print(e.reason)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值