zoukankan      html  css  js  c++  java
  • 从零开始的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"
    }
    
  • 相关阅读:
    Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析
    Linq分区操作之Skip,SkipWhile,Take,TakeWhile源码分析
    Linq生成操作之DefautIfEmpty,Empty,Range,Repeat源码分析
    Linq基础操作之Select,Where,OrderBy,ThenBy源码分析
    PAT 1152 Google Recruitment
    PAT 1092 To Buy or Not to Buy
    PAT 1081 Rational Sum
    PAT 1084 Broken Keyboard
    PAT 1077 Kuchiguse
    PAT 1073 Scientific Notation
  • 原文地址:https://www.cnblogs.com/lbr12218/p/14609056.html
Copyright © 2011-2022 走看看