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&copyright=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('写入文件完毕')

"""

 

posted @ 2019-07-25 21:12  默默扫地僧  阅读(2125)  评论(0编辑  收藏  举报