python爬虫爬取get请求的页面数据代码样例
废话不多说,上代码
#!/usr/bin/env python # -*- coding:utf-8 -*- # 导包 import urllib.request import urllib.parse # 如下两行代码表示忽略https证书,如果请求不是https则该两行代码可不用。 import ssl ssl._create_default_https_context = ssl._create_unverified_context if __name__ == "__main__": """指定爬取的网页URL""" url = 'https://www.baidu.com' """通过urlopen函数向指定url发起请求,返回响应对象""" response = urllib.request.urlopen(url) """通过调用相应对象中的read函数,反馈响应回客户端的数据值(爬到的数据)""" data = response.read() # 获取响应中的数据值(字节类型) # data = response.geturl() # 获取请求的url # data = response.getcode() # 获取响应状态码 # data = response.headers() # 获取响应头信息 # data = str(data, encoding="utf-8") # 方法一、使用str()函数将bytes类型转换为str类型 # data = bytes.decode(data) # 方法二、使用bytes.decode()函数将bytes类型转换为str类型 data = response.read().decode() # 方法三、decode()将响应中字节(byte)类型的数据值转成字符串类型 with open('./baidu.html', 'w') as e: #使用IO操作将data表示的数据值以'w'权限的方式写入到baidu.html文件中 e.write(data) print('写入文件完毕') """ 1、爬取网络上某张图片数据,且存储到本地 if __name__ == '__main__': url = 'http://image.baidu.com/search/detail?ct=503316480&z=0&ipn=d&word=%E5%9B%BE%E7%89%87&step_word=&hs=0&pn=5&spn=0&di=103290&pi=0&rn=1&tn=baiduimagedetail&is=0%2C0&istype=0&ie=utf-8&oe=utf-8&in=&cl=2&lm=-1&st=undefined&cs=3139953554%2C3011511497&os=282365737%2C413977936&simid=0%2C0&adpicid=0&lpn=0&ln=737&fr=&fmq=1564044690482_R&fm=&ic=undefined&s=undefined&hd=undefined&latest=undefined©right=undefined&se=&sme=&tab=0&width=undefined&height=undefined&face=undefined&ist=&jit=&cg=&bdtype=0&oriquery=&objurl=http%3A%2F%2Fpic30.nipic.com%2F20130619%2F9885883_210838271000_2.jpg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fooo_z%26e3Bgtrtv_z%26e3Bv54AzdH3Ffi5oAzdH3F8AzdH3F9aAzdH3Fbdl0c0lhu9kvac8k_z%26e3Bip4s&gsm=0&rpstart=0&rpnum=0&islist=&querylist=&force=undefined' response = urllib.request.urlopen(url) data = response.read() # 因为爬取的是图片数据值(二进制数据),则无需使用decode进行类型转换。 with open('./bird.jpg', 'wb') as e: # 视频、图片等流式数据(二进制数据)使用'wb'进行写入 e.write(data) print('写入完毕') 2、爬取使用百度根据指定词条搜索到的页面数据(例如爬取词条为‘蔡徐坤’的页面数据) url的特性:url必须为ASCII编码的数据值。所以我们在爬虫代码中编写url时,如果url中存在非ASCII编码的数据值,则必须对其进行ASCII编码后,该url方可被使用 if __name__ == "__main__": #原始url中存在非ASCII编码的值,则该url无法被使用。 #url = 'http://www.baidu.com/s?wd=蔡徐坤' #处理url中存在的非ASCII数据值 url = 'http://www.baidu.com/s?' #将带有非ASCII的数据封装到字典中,url中非ASCII的数据往往都是'?'后面键值形式的请求参数 param = { 'wd':'蔡徐坤' } #使用parse子模块中的urlencode函数将封装好的字典中存在的非ASCII的数值进行ASCII编码 param = urllib.parse.urlencode(param) #将编码后的数据和url进行整合拼接成一个完整可用的url url = url + param #伪装UA #将浏览器的UA数据获取,封装到一个字典中。该UA值可以通过抓包工具或者浏览器自带的开发者工具中获取某请求,从中获取UA的值 headers={ 'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' } #自定义一个请求对象 #参数:url为请求的url,headers为UA的值,data为post请求的请求参数(后续介绍) request = urllib.request.Request(url=url,headers=headers) #发送我们自定义的请求(该请求的UA已经进行了伪装) response = urllib.request.urlopen(request) data = response.read() with open('./蔡徐坤.html','wb') as e: e.write(data) print('写入文件完毕') """
心态很重要