zoukankan      html  css  js  c++  java
  • Python3编写网络爬虫01-基本请求库urllib的使用

    安装python后 自带urllib库

    模块篇 分为几个模块如下:

    1. urllib.request 请求模块

    2. urllib.parse 分析模块

    3. urllib.error 异常处理模块

    4. urllib.robotparser robots文本协议识别 用的比较少

    方法篇 分为以下几种方法:

    urlopen()

    示例:

    import urllib.request
    
    response = urllib.request.urlopen("https://www.python.org")
    
    print(response.read().decode('utf-8'))

    type()方法  read()方法  status 方法  getheaders() getheader('Server')

    示例

    import urllib.request
    
    response = urllib.request.urlopen("https://www.python.org")
    
    print(type(response))
    print(response.read())
    print(response.status)
    print(response.getheaders())
    print(response.getheader('Server'))

    参数篇 url data timeout 

    url 请求的URL地址

    data 内容

    示例

    import urllib.parse
    import urllib.request

    data = bytes(urllib.parse.urlencode({'name':'hello','pass':'123'}),encoding='utf-8')
    response = urllib.request.urlopen('http://www.iqianyue.com/mypost',data=data)
    print(response.read())

    timeout 请求超时

    示例

    import urllib.request
    
    response = urllib.request.urlopen('httpbin.org/get',timeout=1)
    print(respons.read())
    
    
    import socket
    import urllib.request
    import urllib.error
    
    try:
    response = urllib.request.urlopen('http://httpbin.org/get',timeout=0.1)
    except urllib.error.URLError as e:
    if isinstance(e.reason,socket.timeout):
    print('TIME OUT')

    requests urllib自带的请求模块

    示例

    import urllib.request
    
    request = urllib.request.Request("http://www.baidu.com")
    
    response = urllib.request.urlopen(request)
    
    print(response.read().decode('utf-8'))
    
    add_header
    
    quote() 将内容转化为URL编码
    
    unquote() 解码

    爬虫爬取百度贴吧实例

    import urllib
    import urllib.request
    import urllib.parse
    
    #百度贴吧爬虫接口 组合url地址 起始页和终止页
    def tiebaSpider(url,beginPage,endPage):
    """
    作用:负责处理 url 分配每一个url去发送请求
    :param url: 处理第一个url
    :param beginPage: 爬虫起始页
    :param endPage: 爬虫终止页
    :return: null
    """
    for Page in range(beginPage,endPage+1):
    pn = (Page-1)*50
    filename = "" + str(Page) + "页.html"
    #组合url 发送请求
    fullurl = url + "&pn=" + str(pn)
    # print fullurl
    # 调用loadPage()函数发送请求获取HTML页面
    html = loadPage(fullurl,filename)
    # 调用writePage()函数 将服务器响应文件保存到本地磁盘
    writeFile(html,filename)
    
    def loadPage(url,filename):
    """
    作用:根据url发送请求 获取服务器响应数据
    :param url: 请求地址
    :param filename: 文件名
    :return:服务器响应文件
    """
    print("正在下载" + filename)
    headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
    request = urllib.request.Request(url,headers = headers)
    response = urllib.request.urlopen(request)
    return response.read()
    
    def writeFile(html,filename):
    """
    作用:保存服务器文件到本地磁盘
    :param html: 服务器文件
    :param filename:本地磁盘文件名
    :return:null
    """
    print("正在存储" + filename)
    with open(filename,"wb+") as f:
    f.write(html)
    print("-"*20)
    
    #模拟main 函数
    if __name__ == "__main__":
    kw = input("请输入要爬取的贴吧名")
    #输入起始页和终止页 str转化为int类型
    beginPage = int(input("请输入爬取的起始页"))
    endPage = int(input("请输入爬取的终止页"))
    url = "http://tieba.baidu.com/f?"
    key = urllib.parse.urlencode({"kw":kw})
    #组合后的url示例 http://tieba.baidu.com/f?kw=lol
    url = url + key
    tiebaSpider(url,beginPage,endPage)

    作业:

    page 页码 不出现负数

    去贴吧帖子下级目录 里面获取信息

    # str为字符串
    # str.isalnum() 所有字符都是数字或者字母
    # str.isalpha() 所有字符都是字母
    # str.isdigit() 所有字符都是数字
    # str.islower() 所有字符都是小写
    # str.isupper() 所有字符都是大写
    # str.istitle() 所有单词都是首字母大写,像标题
    # str.isspace() 所有字符都是空白字符、 、 、

    beginPage = input('请输入开始页(整数): ')
    while True:
    if beginPage.isdigit():
    if int(beginPage) <= 0:
    beginPage = 1
    break
    else:
    beginPage = int(beginPage)
    break
    else:
    beginPage = input('请重新输入开始页(整数):')
  • 相关阅读:
    Rust资料
    CMake & Ninja
    @Configurable
    Hibernate startup -> 配置SessionFactory实例
    Vue 渲染函数
    Spring 5 新特性
    @Configuration 注解的用途
    AOP
    AnnotationConfigApplicationContext.() -> Unit
    C编译优化
  • 原文地址:https://www.cnblogs.com/liuxiaosong/p/10281045.html
Copyright © 2011-2022 走看看