python :通过爬虫爬取数据(1)

(1)通过url爬取网页数据

import urllib.request
 #指定url
 url ="https://www.baidu.com" 
 #向服务器发起请求,返回响应的数据,通过infor接收
 infor = urllib.request.urlopen(url)
  #获取接收的数据,把其保存为Html文件
 data = infor.read().decode("utf-8)  
 '''
 读取infor接收的数据的三种方法
 1.data = infor.readline()    逐行读取
 2.data = inor.readlines()   读取所有文本,赋值给列表变量
 3.data = infor.read().decode("utf-8)  读取所有文本,赋值给字符串变量
 '''
 path =r"D:\pythonItem\爬虫与Json\file.html"
 with open(path,"wb") as f :
	f.write(infor)

#直接把数据读取到文件中的方法,容易带来缓存

import urllib.request
url ="https://www.baidu.com"
path =r"D:\pythonItem\爬虫与Json\file.html"
urllib.request.urlretrieve(url,path)
urllib.request.urlcleanup()  #清除缓存

#返回的数据属性

infor.info()  返回当前环境的所有信息
infor.getcode()     返回状态码
if infor.getcode() == 200 or infor.getcode() == 304 :
	print("请求成功")
urllib.request.unquote(url)  编码url
url.request.quote(url) 解码url

#反爬虫:模拟浏览器

import urllib.request
url ="https://www.baidu.com"
#伪装浏览器
#设置请求头
'''
User-Agent:用户浏览器的基础信息
Content-Type:定义网络文件的类型和网页的编码
X-Requested-With:服务器判断请求类型
Accept:告知客户端可以处理的内型
'''
Headers ={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
   " X-Requested-With": "XMLHttpRequest"
    "Accept": "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01"
    "Content-Type":" baiduApp/json; v6.27.2.14; charset=UTF-8"
}
#设置请求体
req = req =urllib.request.Request(url,headers=Headers)
response =  urllib.request.urlopen(url) 
data = response.read().decode("utf-8")
print(data)

#为防止多次请求被封ip,需要设置随机请求

#获取随机请求头
import urllib.request
import random
user_agent_list=[
		"User-Agent_One"
		"User-Agent_Two"
		"User-Agent_Three"
				……
]
#随机获取列表中的User-Agent
random_agent =random.choice(user_agent_list)
req = urllib.request.Request(url)
#向请求提添加User-Agent
req.add_header("User-Agent",random_agent)
response = urllib.urlopen(req)
print(response.read().decode("utf-8"))

#如果网页长时间未响应,那么则要进行超时处理

timeout :爬虫响应时间
import  urllib.request
for i in range(1,100) :
	try:
		reesponse = urllib.request.urlopen("https://www.baidu.com",timeout = 0.5)
		print(response.read().desode("utf-8"))
	except:
		print("请求超时,请求下一个爬虫")

猜你喜欢

转载自blog.csdn.net/Mr_zhangbz/article/details/83662385