Python爬虫(一)

本教程基于Python3.6,Mac OS系统,Pycharm编辑器

使用urllib库可以获取网页,示例代码如下

 1 from urllib import request
 2 
 3 #要爬取的网页,这里以百度为例
 4 url = 'http://www.baidu.com/'
 5 
 6 #构建请求对象Request
 7 res = request.Request(url)
 8 
 9 #发起请求,得到请求结果,命名为response
10 response = request.urlopen(res)
11 
12 #读取结果,命名为html
13 html = response.read()
14 
15 #打印查看结果
16 print(html)

可以看到打印的结果为

/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 /Users/pn/Desktop/Python/blog/demo.py
b'\n\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\t\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\t\r\n        \r\n\t\t\t        \r\n\t\r\n\t\t\t        \r\n\t\r\n\t\t\t        \r\n\t\r\n\t\t\t        \r\n\t\t\t    \r\n\r\n\t\r\n        \r\n\t\t\t        \r\n\t\r\n\t\t\t        \r\n\t\r\n\t\t\t        \r\n\t\r\n\t\t\t        \r\n\t\t\t    \r\n\r\n\r\n\r\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n\n\n\n    \n    \n    \n\t\n    \n    \n     \n    \n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n    \n    \xe7\x99\xbe\xe5\xba\xa6\xe4\xb8\x80\xe4\xb8\x8b\xef\xbc\x8c\xe4\xbd\xa0\xe5\xb0\xb1\xe7\x9f\xa5\xe9\x81\x93\n    \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n    \r\n\r\n\r\n\r\n\n    \n\n\n\n\t\n    \n    
\n \n \n \n \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n\n\n\n\r\n\r\n\r\n\n\r\n
' Process finished with exit code 0

 

但是我们会发现一个问题,真实的百度网址是https开头的,而不是http

如果我们把刚才的那段代码中的url换成

url = 'https://www.baidu.com/'

会发现报错,错误的提示是

urllib.error.URLError: 

 

这是因为https增加的ssl套接字层阻碍了我们的访问请求,在python爬虫中有两个解决方法

1.使用ssl创建未经验证的上下文,在urlopen中传入上下文参数

import ssl
from urllib import request
 
context = ssl._create_unverified_context()
print request.urlopen("https://www.baidu.com/", context=context).read()

 

2.导入ssl时关闭证书验证

import ssl
 
ssl._create_default_https_context = ssl._create_unverified_context

 

二、当遇到请求错误时

网络请求不一定每次都能成功,很多时候请求会返回一些错误码给我们定位问题,为了安全起见,我们请求网页的代码应该考虑到请求错误的情况,示例代码如下:

from urllib import request
from urllib import error

#要爬取的网页,这里以百度为例
url = 'https://www.baidu.com/'
try:
    # 构建请求对象Request
    res = request.Request(url)
    # 发起请求,得到请求结果,命名为response
    response = request.urlopen(res)
    # 读取结果,命名为html
    html = response.read()
except error.HTTPError as e:
    # 打印HTTP错误结果
    print('Download error:', e.reason)
    html = None
except error.URLError as e:
    #打印URL错误结果
    print('Download error:', e.reason)
    html = None

#打印查看请求结果
print(html)

 

这里我们导入了urllib.error模块,它会把错误的结果返回,我们可以打印查看

转载于:https://www.cnblogs.com/PN-13077313888/p/7267181.html

你可能感兴趣的:(Python爬虫(一))