urllib基础
- urllib库:Python内置的Http请求库,不需要安装。
2.包含4个模块:
- request:最基本的HTTP请求模块,可以用来模拟发送请求。
- error:异常处理模块,若出现请求错误,我们可捕获异常,进行重试或其他操作保证程序不会意外终止。
- parse:一个工具模块,提供许多URL处理放法,比如拆分、解析、合并等。
- robotparser:主要用来识别网站的robots.txt文件,然后判断哪些网站可以爬,那些不可以。
3.几个常用的方法:
import urllib.request
#urlretrieve(网址,本地文件存储地址) 直接下载网页到本地
urllib.request.urlretrieve("http://www.baidu.com","F://新建文件夹//did.html")
urllib.request.urlcleanup()
#看网页相应的简介信息info()
file = urllib.request.urlopen("https://read.douban.com/provider/all")
print(file.info())
#返回网页爬取的状态码getcode()
print(file.getcode())
#获取当前访问网页的url,geturl()
print(file.geturl())
超时设置
超时设置:有的网站能很快被访问,有的访问很慢,通过超时设置,合理分配时间能增加我们爬取网页信息的效率。
实战:
import urllib.request
for i in range(50):
try:
file = urllib.request.urlopen("https://blog.csdn.net/S_123789/article/details/100830233#_84",timeout=2)
print(len(file.read().decode("utf-8")))
except Exception as err:
print("出现异常")
=========================== RESTART: F:/urllib.py ===========================
108903
114184
110053
109001
108480
107203
自动模拟HTTP请求与百度信息自动搜索爬虫实战
......构建用户代理池略......
#模拟Get请求,网页搜索Python,自动爬取1到3页的标题
for i in range(1,3):
data = ua_ip('https://www.baidu.com/s?wd=Python&pn='+str((i-1)*10), ['127.0.0.1:8888']).decode('utf-8', 'ignore')
pat = 'data-tools=(.*?)"title":"(.*?)"'
rst = re.compile(pat).findall(data)
r = []
[r.append(x[1]) for x in rst]
for j in range(0,len(r)):
print(r[j])
#运行结果
用户代理:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5558.400 QQBrowser/10.1.1695.400
ip代理:127.0.0.1:8888
Welcome to Python.org
Python 基础教程 | 菜鸟教程
Download Python | Python.org
Python教程 - 廖雪峰的官方网站
Python 简介 | 菜鸟教程
Python - 开源软件 - OSCHINA_开源中国
用户代理:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)
ip代理:127.0.0.1:8888
十分钟让你看懂Python_图文_百度文库
PythonTab:Python中文开发者社区门户
Python | MOOC中国 - 慕课改变你,你改变世界
Python - 开源软件 - OSCHINA
Python - Python社区
python知识库
python是什么意思_python在线翻译_英语_读音_用法_例句_海词词典
Python - Wikipedia
Python培训机构|Python语言,前后端,爬虫技术,人工智能学习 - 创客...
自动模拟HTTP请求之自动POST实战
'''
post请求:有些网页必须在输入登录名和密码方可显示,
step1:得到登陆界面的url,即posturl;还要知道登录名与密码,即postdata
step2:利用urllib.request.Request(posturl,postdata)以此得到登陆后的url(即登陆后的界面)
'''
import re,urllib.request,urllib.parse
posturl = "http://www.iqianyue.com/mypost/"
postdata=urllib.parse.urlencode({
"name":"123",
"pass":"456",
}).encode("utf-8")
url = urllib.request.Request(posturl,postdata)
data = urllib.request.urlopen(url).read().decode("utf-8")
print(data)
============================ RESTART: F:/post.py ============================
<html>
<head>
<title>Post Test Page</title>
</head>
<body>
<form action="" method="post">
name:<input name="name" type="text" /><br>
passwd:<input name="pass" type="text" /><br>
<input name="" type="submit" value="submit" />
<br />
</body>
</html>
爬虫的异常处理实战
1.异常处理概述:爬虫在运行过程中,很多时候都会遇到这样或那样的异常,如果没有异常处理,爬虫遇到异常就会直接崩溃停止运行,再次运行时,爬虫不会接着运行,而是重新开始,所以要开发一个生命力顽强的爬虫,必须进行异常处理。
2.常见状态码及含义:
301:请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源 处理方式:重定向到分配的URL(永久重定向,重要)
302:请求到的资源在一个不同的URL处临时保存 处理方式:重定向到临时的URL(临时重定向,重要)
304:请求的资源未更新 处理方式:丢弃,使用本地缓存文件(没有发送请求,用的是本地缓存文件,重要)
400:非法请求 处理方式:丢弃
401:未授权 处理方式:丢弃
403:禁止访问 处理方式:丢弃(重要)
404:没有找到 处理方式:丢弃(重要)
3.URLError与HTTPError异常处理类
说明:两者都是异常处理的类,HTTPError是URLError的子类,HTTPError有异常状态码与异常原因,URLError没有异常状态码,所以,在处理的时候,不能直接使用URLError代替HTTPError,如果要代替,必须要判断是否有状态码这个属性。
实战:
#异常处理
URLError出现的原因:
1)连不上服务器
2)远程url不存在
3)无网络
4)触发HTTPError
from urllib import error,request
try:
a = request.urlopen("https://cui.com/index.htm")#访问一个不存在的页面
except error.URLError as e:
print(e.code,e.reason)
============================= RESTART: F:/err.py =============================
404 Not Found
爬虫的浏览器伪装技术实战
1.为什么要用浏览器伪装技术?
由于urlopen()对于一些高级功能不支持,很容易被网站发现是爬虫,而被禁止访问,导致爬取信息失败。这个时候,我们需要伪装成浏览器,再去爬取网页信息。
2.方法:我们可以通过用urllib.request.build_opener()或者urllib.request.Request()下的add_header()来添加报头,实现浏览器的伪装技术。
import urllib.request
进入要爬取的页面,点击F12,随机点击一个网址,从请求头里得到 具体用户代理值
url = "https://www.zhihu.com/"
#设置请求头,格式 headers = ("User-Agent","具体用户代理值")
headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0")
#创建一个opener
opener = urllib.request.build_opener()
#将headers添加到opener中
opener.addheaders=[headers]
#将opener安装为全局
urllib.request.install_opener(opener)
#用urlopen打开网页
data=urllib.request.urlopen(url).read().decode('utf-8')
print(len(data))
Python新闻爬虫实战
#爬取CSDN博客http://blog.csdn.net/首页显示的所有文章,
#每个文章内容单独生成一个本地网页存到本地
'''
1.浏览器伪装访问csdn首页
2.解析出首页各文章的链接
3.循环链接列表,进行访问,将内容保存至本地
'''
import re,urllib.request
url = "http://blog.csdn.net/"
#浏览器伪装
headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0")
#创建一个opener
opener = urllib.request.build_opener()
opener.addheaders = [headers]
#将opener安装为全局
urllib.request.install_opener(opener)
#用urlopen打开网页
data=urllib.request.urlopen(url).read().decode('utf-8')
pat = '<a href="(.*?)" target="_blank"'
link = re.compile(pat).findall(data)
for i in range(0,len(link)):
#用urlopen打开网页
urllib.request.urlretrieve(link[i],"F://CSDN//"+str(i)+".html")