Python之网络爬虫(1)

本博客内容来自韦玮老师网络爬虫课堂笔记,仅用于个人学习和复习,请勿转载用于其他商业用途。

Urllib库(一)

一个简单的小作业

https://read.douban.com/provider/all网址中所有的出版社信息都爬取出来。网站图片如下:

可以看到,网页中有许多的出版社。下面我们用代码将所有出版社的名字爬取出来,并保存在文件中。

import urllib.request
import re

url = "http://read.douban.com/provider/all"
data = urllib.request.urlopen(url).read()
data = data.decode("utf-8")
pat = '<div class="name">(.*?)</div>'
mydata = re.compile(pat).findall(data) #生成了一个列表
fh = open("D:/PROGRAMMING/数据分析/Python数据分析与挖掘实战视频教程/实验/test.txt", "w")
for i in range(0, len(mydata)):
    fh.write(mydata[i] + "\n")
fh.close()

运行后,我们来看一下结果:

嗯,很成功……

1、urllib.request.urlretrive()

可以将目标网页一次性爬到本地。我们试一下将计算机二级考试的官网爬取到本地:

import urllib.request
urllib.request.urlretrieve("http://ncre.neea.edu.cn/", filename="D:/PROGRAMMING/数据分析/Python数据分析与挖掘实战视频教程/实验/1.html") 

查看爬到的网页,大概长这个样子:

2、urllib.request.urlclenup()

使用该函数,可以清除缓存

3、urllib.request.info()

可以了解当前环境的信息,实例如下:

file = urllib.request.urlopen("http://ncre.neea.edu.cn/")
print(file.info())

#
Server: OPTIMUS/1.11.2.4_21
Date: Sat, 16 Nov 2019 10:46:45 GMT
Content-Type: text/html
Content-Length: 21514
Connection: close
Last-Modified: Mon, 11 Nov 2019 06:29:56 GMT
ETag: "5dc8ffe4-540a"
Accept-Ranges: bytes
Age: 2061
Via: http/1.1 CT-CMC-CNC-SDJN-P-118-113 (DLC-6.1.26), http/1.1 CT-SDZZ-C-88-17 (DLC-6.1.26)
Server-Info: DnionATS
HitType: TCP_MEM_HIT

4、urllib.request.getcode()

获取当前爬取网页的状态码,不同的状态码代表不同的信息。

file = urllib.request.urlopen("http://ncre.neea.edu.cn/")
print(file.getcode())

#
200

5、urllib.request.geturl()

获得当去爬取网站的网址。

print(file.geturl())

#
http://ncre.neea.edu.cn/

由于网络速度或服务器的问题,当我们访问一个网站,如果网页长时间未响应,系统会判断该网页超时,无法打开网页。但是有的时候我们需要根据自己的需要来设置超时的时长。比如我们希望2秒钟没有反应,及判断为超时,那么timeout的值就是2。

举例:

file = urllib.request.urlopen("http://ncre.neea.edu.cn/", timeout=1)

使用Python的IDLE执行,会报错,因为这个网站服务器不够强因此很难在1秒钟以内做出反应。如果有些网站的服务器比较差,我们可以将timeout的值设置的大一些。

下面我们多次访问一个网站,将网页进行读取,计算网页字符的长度,timeout设置为0.5秒。如果正常爬取,则输出字符长度,如果出现异常,输出异常原因:

for i in range(0, 100):
    try:
        file = urllib.request.urlopen("http://yum.iqianyue.com",timeout=0.5)
        data = file.read()
        print(len(data))
    except Exception as e:
        print("出现异常:" + str(e))

#
14165
14165
14165
14165
14165
出现异常:<urlopen error timed out>
14165
14165
...
略
发布了27 篇原创文章 · 获赞 9 · 访问量 990

猜你喜欢

转载自blog.csdn.net/sinat_42574069/article/details/103094756