爬虫

参考博客:http://www.cnblogs.com/wupeiqi/articles/5354900.html

http://www.cnblogs.com/wupeiqi/articles/6283017.html


- 基本操作
  概要:
    - 发送Http请求,Python Http请求,requests
    - 提取指定信息,Python 正则表达式,beautifulsoup
    - 数据持久化,

  Python两个模块
    - requests
    - beautifulsoup

  Http请求相关知识
    - 请求:
      请求头:

        - cookie
      请求体:

        - 发送内容

    - 响应:
      响应头
        - 浏览器读取
      响应体
        - 看到的内容

    特殊:
      - cookie
      - csrftoken
      - content-type:

        content-type:application/url-form....
        name=alex&age=18

        content-type:application/json
        {name:'alex',age:18}
- 性能相关
  - 串行: 1个人,一个任务一个任务,空余时间,玩。
  - 线程: 10个人,一个任务一个任务,空余时间,玩。
  - 进程: 10个家庭,一个任务一个任务,空余时间,玩。
  - 【协程】异步非阻塞:1个人,充分利用时间。

- scrapy框架
  - 规则

- redis-scrapy组件

内容详细:
  - 基本操作,python伪造浏览器发送请求并或者指定内容

    pip3 install requests
    response = requests.get('http://www.baidu.com')
    response.text

    pip3 install beautifulsoup4
    from bs4 import Beautifulsoup

    soup = Beautifulsoup(response.text,'html.parser')
    soup.find(name='h3',attrs={'class':'t'})
    soup.find_all(name='h3')

    示例:爬取汽车之家新闻

  - 模块

    requests
      GET:
        requests.get(url="http://www.oldboyedu.com")
        # data="http GET / http1.1\r\nhost:oldboyedu.com\r\n....\r\n\r\n"

        requests.get(url="http://www.oldboyedu.com/index.html?p=1")
        # data="http GET /index.html?p=1 http1.1\r\nhost:oldboyedu.com\r\n....\r\n\r\n"

        requests.get(url="http://www.oldboyedu.com/index.html",params={'p':1})
        # data="http GET /index.html?p=1 http1.1\r\nhost:oldboyedu.com\r\n....\r\n\r\n"

     POST:
        requests.post(url="http://www.oldboyedu.com",data={'name':'alex','age':18}) # 默认请求头:url-formend....
        data="http POST / http1.1\r\nhost:oldboyedu.com\r\n....\r\n\r\nname=alex&age=18"

        requests.post(url="http://www.oldboyedu.com",json={'name':'alex','age':18}) # 默认请求头:application/json
        data="http POST / http1.1\r\nhost:oldboyedu.com\r\n....\r\n\r\n{"name": "alex", "age": 18}"

        requests.post(
          url="http://www.oldboyedu.com",
          params={'p':1},
          json={'name':'alex','age':18}
        ) # 默认请求头:application/json

        data="http POST /?p=1 http1.1\r\nhost:oldboyedu.com\r\n....\r\n\r\n{"name": "alex", "age": 18}"

    补充:
      request.body,永远有值
      request.POST,可能没有值

beautifulsoup
  soup = beautifulsoup('HTML格式字符串','html.parser')

  tag = soup.find(name='div',attrs={})
  tags = soup.find_all(name='div',attrs={})

  tag.find('h3').text
  tag.find('h3').get('属性名称')
  tag.find('h3').attrs

HTTP请求:


    GET请求:
      data="http GET /index?page=1 http1.1\r\nhost:baidu.com\r\n....\r\n\r\n"

    POST请求:
      data="http POST /index?page=1 http1.1\r\nhost:baidu.com\r\n....\r\n\r\nname=alex&age=18"

    socket.sendall(data)

   示例【github和抽屉】:任何一个不用验证码的网站,通过代码自动登录

    1. 按理说
      r1 = requests.get(url='https://github.com/login')
      s1 = beautifulsoup(r1.text,'html.parser')
      val = s1.find(attrs={'name':'authenticity_token'}).get('value')

      r2 = requests.post(
        url= 'https://github.com/session',
        data={
          'commit': 'Sign in',
          'utf8': '✓',
          'authenticity_token': val,
          'login':'xxxxx',
          'password': 'xxxx',

        }
      )

      r2_cookie_dict = r2.cookies.get_dict() # {'session_id':'asdfasdfksdfoiuljksdf'}

      保存登录状态,查看任意URL

      r3 = requests.get(
        url='xxxxxxxx',
        cookies=r2_cookie_dict
      )

      print(r3.text) # 登录成功之后,可以查看的页面

  2. 不按理说
      r1 = requests.get(url='https://github.com/login')
      s1 = beautifulsoup(r1.text,'html.parser')
      val = s1.find(attrs={'name':'authenticity_token'}).get('value')
      # cookie返回给你
      r1_cookie_dict = r1.cookies.get_dict()

      r2 = requests.post(
        url= 'https://github.com/session',
        data={
          'commit': 'Sign in',
          'utf8': '✓',
          'authenticity_token': val,
          'login':'xxxxx',
          'password': 'xxxx',

          },
          cookies=r1_cookie_dict
         )
    # 授权
        r2_cookie_dict = r2.cookies.get_dict() # {}

        保存登录状态,查看任意URL

        r3 = requests.get(
          url='xxxxxxxx',
          cookies=r1_cookie_dict
        )

        print(r3.text) # 登录成功之后,可以查看的页面

  - requests
    """
      1. method
      2. url
      3. params
      4. data
      5. json
      6. headers
      7. cookies
      8. files
      9. auth
      10. timeout
      11. allow_redirects
      12. proxies
      13. stream
      14. cert
      ================ session,保存请求相关信息(不推荐)===================
      import requests

      session = requests.Session()

      i1 = session.get(url="http://dig.chouti.com/help/service")
      i2 = session.post(
        url="http://dig.chouti.com/login",
        data={
        'phone': "8615131255089",
        'password': "xxooxxoo",
        'oneMonth': ""
      }
      )
      i3 = session.post(
        url="http://dig.chouti.com/link/vote?linksId=8589523"
      )
      print(i3.text)

    """
  - beautifulsoup
  - find()
  - find_all()
  - get()
  - attrs
  - text

内容:
  1. 示例:汽车之家
  2. 示例:github和chouti
  3. requests和beautifulsoup
  4. 轮询和长轮询
  5. Django
    request.POST
    request.body

    # content-type:xxxx

作业:web微信
  功能:
    1. 二维码显示
    2. 长轮询:check_login
    3.
      - 检测是否已经扫码
      - 扫码之后201,头像: base64:.....
      - 点击确认200,response.text redirect_ur=....
    4. 可选,获取最近联系人信息

安装:
  twsited
  scrapy框架

课堂代码:https://github.com/liyongsan/git_class/tree/master/day36

day36 爬虫+http请求+高性能的更多相关文章

  1. Python3 网络爬虫(请求库的安装)

    Python3 网络爬虫(请求库的安装) 爬虫可以简单分为几步:抓取页面,分析页面和存储数据 在页面爬取的过程中我们需要模拟浏览器向服务器发送请求,所以需要用到一些python库来实现HTTP的请求操 ...

  2. 爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,loads,dump,load方法介绍

    爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,load ...

  3. HTTP请求中的User-Agent 判断浏览器类型的各种方法 网络爬虫的请求标示

    我们知道,当用户发送一个http请求的时候,浏览的的版本信息也包含在了http请求信息中: 如上图所示,请求 google plus 请求头就包含了用户的浏览器信息: User-Agent:Mozil ...

  4. fake-useragent,python爬虫伪装请求头

    在编写爬虫进行网页数据的时候,大多数情况下,需要在请求是增加请求头,下面介绍一个python下非常好用的伪装请求头的库:fake-useragent,具体使用说明如下: 1.在scrapy中的使用 第 ...

  5. 爬虫、请求库selenium

    阅读目录 一 介绍 二 安装 三 基本使用 四 选择器 五 等待元素被加载 六 元素交互操作 七 其他 八 项目练习 一 介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决r ...

  6. 爬虫、请求库requests

    阅读目录 一 介绍 二 基于GET请求 三 基于POST请求 四 响应Response 五 高级用法 一 介绍   #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,req ...

  7. python爬虫#网络请求requests库

    中文文档 http://docs.python-requests.org/zh_CN/latest/user/quickstart.html requests库 虽然Python的标准库中 urlli ...

  8. python 爬虫001-http请求过程

    HTTP 请求流程 一次完整的HTTP请求过程从TCP三次握手建立连接成功后开始,客户端按照指定的格式开始向服务端发送HTTP请求,服务端接收请求后,解析HTTP请求,处理完业务逻辑,最后返回一个HT ...

  9. python爬虫添加请求头和请求主体

    添加头部信息有两种方法 1.通过添加urllib.request.Request中的headers参数 #先把要用到的信息放到一个字典中 headers = {} headers['User-Agen ...

随机推荐

  1. Using RUNDLL32.exe to call a function within a dll

    Using RUNDLL32.exe to call a function within a dll        Rundll32 is a utility included with Window ...

  2. Hadoop 2.0 上深度学习的解决方案

    原文连接:https://www.paypal-engineering.com/tag/data-science/ 摘要:伴随着数据的爆炸性增长和成千上万的机器集群,我们需要使算法可以适应在如此分布的 ...

  3. yarn nodes label (yarn 划分子集群)

    yarn node labels 特性给节点打标签可以把特性类似的节点分成一组,这样可以指定特定的应用执行在特定的机器群上.现在我们只支持节点划分,1.一个节点仅能有一个节点划分,即一个节点只能打一个 ...

  4. NRF24L01——工作原理解读

    源: NRF24L01——工作原理解读

  5. FTP 两种工作模式

    主动模式port FTP主动模式:TCP链接客户端访问FTP,客户端会开启一个大于1024的端口N访问FTP的21端口(控制端口),并通过21端口发送port命令与N+1的端口,服务端收到命令后会使用 ...

  6. 一键安装lnmp(2)

    all(){path=`pwd`cd $pathechoecho "exclude=*.i386 *.i686" >> /etc/yum.confrpm -ivh ht ...

  7. mysql5.6备份

    备份之前: 最初的二进制信息: mysql> show master logs; +------------------+-----------+ | Log_name | File_size ...

  8. VisualStudio下如何编译和使用最新版本的OpenCV(修正版)

    OpenCV是托管于GitHub的开源项目,本文具体解决一个问题,就是“获取最新版本的OpenCV,并且在自己的项目中使用起来"   最新版本 2017年3月31日 BY:jsxyhelu ...

  9. 《Java程序设计》实验2实验报告

    20145318 <Java程序设计>实验2 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 ...

  10. 20145333《Java程序设计》课程总结

    每周读书笔记链接汇总 第一周学习总结 第二周学习总结 第三周学习总结 第四周学习总结 第五周学习总结 第六周学习总结 第七周学习总结 第八周学习总结 第九周学习总结 第十周学习总结 实验报告链接汇总 ...