• 爬虫之urllib模块


    1. urllib模块介绍

    • python自带的一个基于爬虫的模块。
    • 作用:可以使用代码模拟浏览器发起请求。
    • 经常使用到的子模块:request,parse。
    • 使用流程:
      • 指定URL。
      • 针对指定的URL发起了一个请求。
      • 获取页面数据。
      • 持久化储存。

    2. 爬取搜狗首页的页面数据

    # 需求:爬取搜狗首页的页面数据
    import urllib.request
    
    # 1. 指定url
    url = 'https://www.sogou.com/'
    
    # 2. 发起请求:urlopen可以根据指定的url发起请求,且返回一个响应对象(byte类型)
    response = urllib.request.urlopen(url)
    
    # 3. 获取页面数据:read函数返回的就是响应对象中存储的页面数据
    page_text = response.read()
    
    # 4.  持久化存储
    with open('./sougou.html','wb') as fp:
        fp.write(page_text)
        print('写入数据成功')

    3. 爬取指定词条所对应的页面数据

    import urllib.request
    import urllib.parse
    
    # 1. 指定url
    url = 'https://www.sogou.com/web?query='
    
    # url特性:url不可以存在非ASCII编码的字符数据
    word = urllib.parse.quote('人民币')
    url += word # 有效的url
    
    # 2. 发起请求
    response = urllib.request.urlopen(url=url)
    
    # 3. 获取页面数据
    page_text = response.read()
    with open('rmb.html','wb') as fp:
        fp.write(page_text)

    4.反爬和反反爬

    • 反爬机制:网站检查请求的UA,如果发现UA是爬虫程序,则拒绝提供网站数据。
    • User-Agent(UA):请求载体的身份标识,正常是浏览器。
    • 反反爬机制:伪装爬虫程序请求的UA,例如伪装成谷歌浏览器或火狐浏览器的身份标识。
    mport urllib.request
    
    url = 'https://www.baidu.com/'
    
    # UA伪装
    # 1. 自制定一个请求对象
    headers = {
        # 存储任意的请求头信息
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
    }
    # 该请求对象的UA进行了成功的伪装
    request = urllib.request.Request(url=url,headers=headers)
    
    # 2. 针对自制定的请求对象发起请求
    reponse = urllib.request.urlopen(request)
    
    print(reponse.read())

    5. post请求

    import json
    import urllib.request
    import urllib.parse
    
    # 一、 指定URL
    url = 'https://fanyi.baidu.com/sug'
    
    # 对post请求携带的参数进行处理。流程:
    # 1. 将请求参数封装到字典中
    data = {
        'kw':'西瓜'
    }
    
    # 2. 使用parse中的urlencode进行编码处理
    data = urllib.parse.urlencode(data)
    
    # 3. 将步骤2的编码结果转换成byte类型
    data = data.encode()
    
    # 二、发起post请求:urlopen函数的data参数表示的就是经过处理之后的post请求携带的参数
    response = urllib.request.urlopen(url=url,data=data)
    
    page_text = response.read()
    
    with open('translate.json','ab') as fp:
        fp.write(page_text)
  • 相关阅读:
    xpath解析以及lxml解析库
    python sort()和sorted()的不同
    爬取电影天堂-二级页面抓取
    爬取猫眼电影榜单TOP100榜-以mysql数据库保存
    爬取猫眼电影榜单TOP100榜-以csv文件保存
    爬取猫眼电影榜单TOP100榜-以命令行输出
    爬虫 贪婪匹配以及非贪婪匹配
    爬取百度贴吧
    python 面试
    python 从array保存伪色彩图片 —— 发现的坑
  • 原文地址:https://www.cnblogs.com/lshedward/p/10647163.html
Copyright © 2020-2023  润新知