1.使用build_opener()修改报头
报头即请求报头(Request Header)是在发送 HTTP 请求时包含的一系列信息(按F12在网络下面可以找到,如果没有出现就按F5刷新),用于告诉服务器关于请求的详细信息和客户端的身份标识。它通常以键值对的形式组成,每个键值对表示一个具体的请求头字段和对应的值。
请求报头中的一些常见字段包括:
User-Agent:用于标识发起请求的客户端身份信息,包括操作系统、浏览器等。
Accept:表示客户端能够接受的响应内容类型,通常指定 MIME 类型。
Referer:表示当前请求的来源页面的 URL。
Cookie:用于在客户端和服务器之间传递会话信息的标识符。
Authorization:在进行身份验证时用于传递认证凭证。
Content-Type:表示请求体中发送的数据类型。
import urllib.request
import urllib.parse
headers = ("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0")
keyword = ""
url = "https://bbs.pinggu.org/" + urllib.parse.quote(keyword)
# 使用build_opener()修改报头
opener = urllib.request.build_opener()
opener.addheaders = [headers]
data = opener.open(url).read()
with open("7.13.html", "wb") as f:
f.write(data)
上述代码爬取了经管之家的页面,并将页面保存在一个叫7.13的HTML文件中,keyword是搜索的关键词。
2.用add_header()添加报头
import urllib.request
import urllib.parse
headers = ("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0")
keyword = ""
url = "https://bbs.pinggu.org/" + urllib.parse.quote(keyword)
# 使用add_header()添加报头
req = urllib.request.Request(url)
req.add_header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0")
data = urllib.request.urlopen(req).read()
with open("7.13.html", "wb") as f:
f.write(data)
3.设置超时
import urllib.request
url = "https://bbs.pinggu.org/"
for i in range(1, 37):
try:
f = urllib.request.urlopen(url, timeout=1)
data = f.read()
print(len(data))
except Exception as e:
print("出现异常-->"+str(e))
上述代码循环了36次,判断是否超时是1秒,没有异常会返回读取内容长度,否则会抛出错误。