您的位置:首页 > 理论基础 > 计算机网络

网络爬虫入门到应用

2019-07-19 17:30 1341 查看

文章目录

  • 二. 爬虫之登录github
  • 三. requests模块详解
  • 四. bs4模块简述
  • 五. 轮询
  • 六. 长轮询
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一.
  • 一. 爬虫基本原理概述
    1. 爬虫基本流程
    • 发起请求
      通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。
    • 获取响应内容
      如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型。
    • 解析内容
      得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。
    • 保存数据
      保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件。
    2. Request与Response

    浏览器发送消息给该网址所在的服务器,这个过程叫做HTTP Request。服务器收到浏览器发送的消息后,能够根据浏览器发送消息的内容,做相应处理,然后把消息回传给浏览器。这个过程叫做HTTP Response。 浏览器收到服务器的Response信息后,会对信息进行相应处理,然后展示。

    3. Request
    • 请求方式
      主要有GET、POST两种类型,另外还有HEAD、PUT、DELETE、OPTIONS等。
    • 请求URL
      URL全称统一资源定位符,如一个网页文档、一张图片、一个视频等都可以用URL唯一来确定。
    • 请求头
      包含请求时的头部信息,如User-Agent、Host、Cookies等信息。
    • 请求体
      请求时额外携带的数据,如表单提交时的表单数据
    4. Response
    • 响应状态
      有多种响应状态,如200代表成功、301跳转、404找不到页面、502服务器错误
    • 响应头
      如内容类型、内容长度、服务器信息、设置Cookie等等
    • 响应体
      最主要的部分,包含了请求资源的内容,如网页HTML、图片二进制数据等
    5. 抓取的数据类型
    • 网页文本
      如HTML文档、Json格式文本等
    • 图片
      获取到的是二进制文件,保存为图片格式
    • 视频
      同为二进制文件,保存为视频格式即可
    • 其他数据
      只要是能请求到的,一般都能获取
    6. 解析方式
    • 直接处理
    • Json解析
    • 正则表达式
    • BeautifulSoup
    • PyQuery
    • Path
    7. JavaScript渲染问题
    • 分析Ajax请求
    • Selenium/WebDriver
    • Splash
    • PyV8
    • Ghost
    8. 数据的保存
    • 文本
      纯文本、Json、Xml等……
    • 关系型数据库
      如MySQL、Oracle、SQL Server等具有结构化表结构形式存储
    • 非关系型数据库
      如MongoDB、Redis等Key-Value形式存储
    • 二进制文件
      如图片、视频、音频等等直接保存成特定格式即可
    二. 爬虫之登录github
    1. 向Github登录页面发送get请求获取csrf_token
    import requests
    from bs4 import BeautifulSoup
    
    # request login page to get csrfequest
    resp = requests.get('https://github.com/login')
    login_bs = BeautifulSoup(resp.text, 'html.parser')
    token = login_bs.find(name='input', attrs={'name': 'authenticity_token'}).get('value')
    get_cookies_dict = resp.cookies.get_dict()  # get cookies
    print(token)

    2. 发送post请求登录Github获取cookies

    获取登录需要带的参数,

    import requests
    from bs4 import BeautifulSoup
    
    # request login page to get csrfequest
    resp = requests.get('https://github.com/login')
    login_bs = BeautifulSoup(resp.text, 'html.parser')
    token = login_bs.find(name='input', attrs={'name': 'authenticity_token'}).get('value')
    get_cookies_dict = resp.cookies.get_dict()  # get cookies
    # login github with cookies and other parameters,remember save cookies
    resp2 = requests.post(
    'https://github.com/session',
    data={
    'utf8': '✓',
    'authenticity_token': token,
    'login': 'username',#your username
    'password': 'password',#your password
    'webauthn-support': 'unknown',
    'commit': 'Sign in',
    },
    cookies=get_cookies_dict
    )
    post_cookie_dict = resp2.cookies.get_dict()
    # print(get_cookies_dict)
    # print(post_cookie_dict)
    cookies_dict = {}
    cookies_dict.update(get_cookies_dict)
    cookies_dict.update(post_cookie_dict)
    print(cookies_dict)

    3. 带着cookies访问页面并获取内容
    import requests
    from bs4 import BeautifulSoup
    
    # request login page to get csrfequest
    resp = requests.get('https://github.com/login')
    login_bs = BeautifulSoup(resp.text, 'html.parser')
    token = login_bs.find(name='input', attrs={'name': 'authenticity_token'}).get('value')
    get_cookies_dict = resp.cookies.get_dict()  # get cookies
    # login github with cookies and other parameters,remember save cookies
    resp2 = requests.post(
    'https://github.com/session',
    data={
    'utf8': '✓',
    'authenticity_token': token,
    'login': 'username',#your username
    'password': 'password',#your password
    'webauthn-support': 'unknown',
    'commit': 'Sign in',
    },
    cookies=get_cookies_dict
    )
    post_cookie_dict = resp2.cookies.get_dict()
    # print(get_cookies_dict)
    # print(post_cookie_dict)
    cookies_dict = {}
    cookies_dict.update(get_cookies_dict)
    cookies_dict.update(post_cookie_dict)
    # request primary page
    request_url = 'https://github.com/settings/profile'
    resp3 = requests.get(url=request_url, cookies=cookies_dict)
    print(resp3.text)
    三. requests模块详解
    四. bs4模块简述
    五. 轮询
    六. 长轮询
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    一.
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: