栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python爬虫学习(一)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python爬虫学习(一)

1.使用urllib库

urllib库是python内置的HTTP请求库,包含4个模块:
1.request:是最基本的http请求模块,可以用来模拟发送请求,就像在浏览器里输入网址按回车一样,只需要给库方法传入URL和其他参数,就可以实现这个过程了。
2.error:异常处理模块。
3.parse:一个工具模块,提供许多URL处理方法,比如拆分,解析,合并等。
4.robotparser:主要用来识别网站的robot.txt文件,然后判断哪些网站可以爬,它用的比较少。
1.发送请求
1.urlopen()方法
使用urlopen()方法模拟浏览器发送请求,以python官网为例:

# -*- coding: utf-8 -*-
import urllib.request

response=urllib.request.urlopen('http://www.python.org')
#爬取python官网
print(response.read().decode('utf-8'))

print(type(response))

用type()方法查看输出类型,是一个HTTPResponse类型的对象,主要包含read(),readinto(),getheader(name),getheader(),fileno()等方法,以及msg,status,reason,debuglevel,closed等属性。
read()方法可以得到返回网页的内容,satus可以得到返回结果的状态码,如200代表成功,404代表未找到网页。
如:

print(response.status)
200

2.urlopen()的参数用法
urlopen()函数的API:
urllib.request.urlopen(url,data=None,[timeout, ]*,cafile=None,capath=None,cadefault=False,context=None)

  • data参数:可选参数,如果传递了这个参数就不再是get方式,而是post方式。
  • timeout参数:用于设置超时时间,单位秒,意思是如果超出这个时间还没有得到响应,就是抛出异常。可以实现控制一个网页如果长时间未响应,就跳过它的抓取,可以用try except语句实现。
    2.Request()方法
    Request()方法可以构建更完整的请求,如需要在请求中加入Headers等信息。
    Request()用法如下:
import urllib.request
request=urllib.request.Request('http://python.org')
reslib.request.urlopen(request)
print(response.read().deponse=urlcode('utf-8'))

Request()方法构造如下:
urllib.request.Request(url,data=None,hesders={},origin_req_hostt=None,unverifiable=False,method=None)

  • headers是一个字典,它就是请求头,可以通过headers参数直接构造,也可以通过调用实例的add_header()方法添加。
    添加请求头最常用的方法就是通过修改User-Agent来伪装浏览器,默认的User-Agent是Python-urllib,可以通过修改它来伪装浏览器。
  • origin_req_host指的是请求方的host名称或者IP地址。
  • unverifiable表示这个请求是否是无法验证的,默认是False。
  • method是一个字符串,表示请求使用的方法,比如GET,POST,PUT等。
    3.试着传入多个参数构建请求:
#传入多个参数
from urllib import request ,parse
url='http://httpbin.org/post'  #url必传参数
headers={
        'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
        'Host':'httpbin.org'}
dict={'name':'Germey'}  #headers参数
data=bytes(parse.urlencode(dict),encoding='utf8')  #data参数
req=request.Request(url=url,data=data,headers=headers,method='POST')#请求方式为POST
response=request.urlopen(req)
print(response.read().decode('utf-8'))

hesders也可以用add_headers()方法添加请求头:

#用add_headers()方法添加headers
req=request.Request(url=url,data=data,method='POST') 
req.add_header('User-Agent','Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')

2.高级用法
对于一些更高级的操作,比如cookies处理,代理设置等,就需要更强大的工具Handler,可以把它理解为各种处理器,有专门处理验证登录的,有专门的处理cookies的,有专门处理代理设置的。
首先,urllib.request模块中的baseHandler类,是所有其他Handler的父类,它提供了最基本的方法,比如default_open()、protocol_request()等。

  • HTTPDefaultErrorHandler:用于处理HTTP响应错误。

  • HTTPRedirectHandler:用于处理重定向。

  • HTTPcookieProcessor:用于处理cookies。

  • ProxyHandler:用于设置代理,默认代理为空。

  • HTTPPasswordMgr:用于管理用户名和密码。

  • HTTPBasicAuthHandler:用于管理认证。
    还有一个重要的类就是OpenerDirector,可以称为Opener,Opener可以使用open()方法,返回的类型和urlopen()一样,可以利用Handler来构建Opener。

  • 验证
    有些网站打开会弹出提示框,需要你输入用户名和密码,验证成功后才能查看页面,如果请求这样的页面就需要借助HTTPBasicAuthHandler,代码如下:

在这里插入代码片
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/295922.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号