Python urllib 库用于操作网页 URL,并对网页的内容进行抓取处理。
urllib 库主要包含以下几个模块:
robots.txt 文件:当蜘蛛访问网站时,首先会去访问网站根目录下的robots.txt文件,会按照这个文件中指定的robots协议不去抓取网站中的部分内容。简单概括的话,robots文件就是控制搜索引擎的蜘蛛抓取网站内容的协议。
urllib.request 可以模拟浏览器的一个请求发起的过程。
urllib.request.urlopen方法来开发一个URL,语法格式如下:
def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
*, cafile=None, capath=None, cadefault=False, context=None):
http://www.httpbin.org 是一个可以检测请求的一个网站工具
import urllib.request
url = "http://www.httpbin.org/get"
result = urllib.request.urlopen(url)
print(result.read().decode(‘utf-8‘)) #对获取到的网页进行utf-8解码
print(result.getcode()) # 200,返回状态码
print(result.getheaders()) # 获取所有responseHeader
print(result.getheader("Server")) # 获取responseHeader中的Server参数
import urllib.parse
url = "http://www.httpbin.org/post"
params = {"hello": "world"}
data = urllib.parse.urlencode(params).encode("utf-8") # 对json参数进行编码
result = urllib.request.urlopen(url=url, data=data)
print(result.read().decode())
try:
url = "http://www.httpbin.org/get"
result = urllib.request.urlopen(url, timeout=0.01) # 单位:秒
print(result.read().decode())
except urllib.error.URLError as e:
print("Time out! ==> {0}".format(e))
url = "http://www.httpbin.org/post"
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-60d6a949-50a80ada4a3a35b9521a5e6d"}
req = urllib.request.Request(url=url, headers=headers, method="POST")
result = urllib.request.urlopen(req)
print(result.read().decode(‘utf-8‘))
class Request:
def __init__(self, url, data=None, headers={},origin_req_host=None, unverifiable=False,method=None):
构建Request对象,然后把该对象放入urllib.request.urlopen(req);
注意:
<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)>
解决办法:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
原文:https://www.cnblogs.com/sun2020/p/14939431.html