• 从零开始的python爬虫教程(Day02)


    爬虫的概念

    网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。(来源于百度百科)

    爬虫的过程有三步:

    1. 获取网页
    2. 获取信息
    3. 保存信息

    爬虫常用库

    请求库
    urllib
    requests
    解析库
    lxml
    BeautifulSoup
    自动化
    Selenium
    框架
    pyspider
    scrapy

    Requests库基础用法

    01 安装

    在命令行中输入:

    pip install requests
    

    即可。

    如果速度太慢,可以使用中科大的源:

    pip install --index https://pypi.mirrors.ustc.edu.cn/simple requests
    

    安装完成之后,可以在python命令行输入“import requests”检验。

    02 GET请求基本使用

    (1) 基本操作

    import requests
    
    response = requests.get('https://httpbin.org/get')
    print(response.text)
    

    请求结果为:

    {
      "args": {}, 
      "headers": {
        "Accept": "*/*", 
        "Accept-Encoding": "gzip, deflate", 
        "Host": "httpbin.org", 
        "User-Agent": "python-requests/2.23.0", 
        "X-Amzn-Trace-Id": "Root=1-5f107d75-db1210ba8a626de146e579e8"
      }, 
      "origin": "***.***.***.**", 
      "url": "https://httpbin.org/get"
    }
    

    这里的 requests.get 是用get方法请求网页。

    get请求返回了一个response对象,这个对象包含了请求的类型、状态码、请求类型、cookie、内容。

    以上实例中response.text是获取返回对象中的文字部分内容。

    以下为get请求的部分用法

    import requests
    
    response = requests.get('https://httpbin.org/get')
    print(response)
    print(type(response)) # response 类型
    print(response.text) # 内容
    print(response.content) # 二进制内容(可用于获取视频、图片)
    print(response.status_code) # 状态码
    print(response.cookies) # cookie
    
    # response
    <Response [200]>
    # type(response)
    <class 'requests.models.Response'>
    # response.text
    {
      "args": {}, 
      "headers": {
        "Accept": "*/*", 
        "Accept-Encoding": "gzip, deflate", 
        "Host": "httpbin.org", 
        "User-Agent": "python-requests/2.23.0", 
        "X-Amzn-Trace-Id": "Root=1-5f108010-4f6006d11ae9755b42e9c0ec"
      }, 
      "origin": "182.116.195.12", 
      "url": "https://httpbin.org/get"
    }
    # response.content
    b'{
      "args": {}, 
      "headers": {
        "Accept": "*/*", 
        "Accept-Encoding": "gzip, deflate", 
        "Host": "httpbin.org", 
        "User-Agent": "python-requests/2.23.0", 
        "X-Amzn-Trace-Id": "Root=1-5f108010-4f6006d11ae9755b42e9c0ec"
      }, 
      "origin": "182.116.195.12", 
      "url": "https://httpbin.org/get"
    }
    '
    # response.status_code
    200
    # response.cookies
    <RequestsCookieJar[]>
    

    (2) 携带参数

    我们在浏览网页的时候经常会发现申请的网页需要携带参数。例如:

    https://www.baidu.com/s?wd=%E7%88%AC%E8%99%AB
    

    其中wd就是携带的一个参数。

    requests可以携带参数进行get请求,用法是将参数以字典的方式传入。

    import requests
    
    param = {
        'language':'python',
        'date':2020
        }
    response = requests.get('https://httpbin.org/get', params = param)
    print(response)
    print(response.text)
    

    结果为:

    <Response [200]>
    {
      "args": {
        "date": "2020", 
        "language": "python"
      }, 
      "headers": {
        "Accept": "*/*", 
        "Accept-Encoding": "gzip, deflate", 
        "Host": "httpbin.org", 
        "User-Agent": "python-requests/2.23.0", 
        "X-Amzn-Trace-Id": "Root=1-5f10f4ab-70ef76c5173e4e72b835dfef"
      }, 
      "origin": "***.***.***.**", 
      "url": "https://httpbin.org/get?language=python&date=2020"
    }
    

    可以看到,申请的url和参数language、date构成了一个url。

    https://httpbin.org/get?language=python&date=2020
    

    (3) 添加请求头

    我们如果使用上面的方式去请求一些网页,会发现有些网页无法请求到我们在网页看到的内容。

    其中一个原因是,它识别出请求方并不是一个浏览器,而是一个python程序,可以看到上面程序的结果,请求头"User-Agent"是"python-requests/2.23.0"。

    故此我们可以使用下面的方法进行请求头的添加:

    import requests
    
    param = {
        'language':'python',
        'date':2020
        }
    
    header = {'user-agent':'Mozilla/5.0'}
    
    response = requests.get('https://httpbin.org/get', params = param, headers = header)
    print(response)
    print(response.text)
    

    这样请求出来的请求头就是Mozilla/5.0。

    03 POST请求基本使用

    post请求的用法与get相似,只需要将requests.get换成requests.post就行了。

    它还有一些特殊的用法,例如文件的上传等等:

    import requests
    
    file = {
        'file':'01.png'
        }
    
    response = requests.post('https://httpbin.org/post', files = file)
    print(response)
    print(response.text)
    
    <Response [200]>
    {
      "args": {}, 
      "data": "", 
      "files": {
        "file": "01.png"
      }, 
      "form": {}, 
      "headers": {
        "Accept": "*/*", 
        "Accept-Encoding": "gzip, deflate", 
        "Content-Length": "146", 
        "Content-Type": "multipart/form-data; boundary=92058415dea9dc33df31608265fffb6f", 
        "Host": "httpbin.org", 
        "User-Agent": "python-requests/2.23.0", 
        "X-Amzn-Trace-Id": "Root=1-5f10f8f9-0d04b1f17e223a03f35f9751"
      }, 
      "json": null, 
      "origin": "***.***.***.**", 
      "url": "https://httpbin.org/post"
    }
    
  • 相关阅读:
    必须掌握的八个DOS命令
    实况足球8 功略简解
    开始→运行→命令集锦
    必须掌握的八个DOS命令
    对称加密算法之DES算法
    让你的Linux像黑客帝国的画面一样炫酷
    古典密码之凯撒密码and换位密码
    用eclipse写jsp报以下错误
    mysql安装后,过一段时间,在命令行无法启动
    sql 日期函数
  • 原文地址:https://www.cnblogs.com/lbr12218/p/14609056.html
Copyright © 2020-2023  润新知