爬虫

参考博客: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. iis7.5安装配置php环境详细清晰教程,三步实现【图文】

    iis7.5安装配置php环境详细清晰教程,三步实现[图文] iis7.5是安装在win7.win8里的web服务器,win2003.win2000的web服务器使用的是iis6.0,由于win7.w ...

  2. Linux系统——NFS网络文件系统

    在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频,图片,附件等静态资源文件,通常网站用户上传的文件都会放到NFS共享里,然后前端所有的节点访问这些静态资源时都会读取NFS存储上的资 ...

  3. iClap分享:如何优雅的在 APP 中实现测试?

    开发团队常面临的问题有:内测 APP 时测出一堆 bug 写了很多文档,交到下一个人手中时问题总是不够清晰明了;版本发布公测时只能分发原生版本给团队和用户,无法快速反馈测试和体验结果;使用第三方工具, ...

  4. 714. Best Time to Buy and Sell Stock with Transaction Fee

    问题 给定一个数组,第i个元素表示第i天股票的价格,可执行多次"买一次卖一次",每次执行完(卖出后)需要小费,求最大利润 Input: prices = [1, 3, 2, 8, ...

  5. [原创]CSS 去掉点li 的点 使得LI前面的点不在显示

    我对博客的认识是:记录问题,解决问题,分享知识.如果有轮子,我不需要造轮子. 1.问题解决方式: 设置属性:li {list-style-type:none;} 2.更多属性参数参考 list-sty ...

  6. 20145240《网络对抗》Web安全基础实践

    Web安全基础实践 实验后回答问题 (1)SQL注入攻击原理,如何防御 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语 ...

  7. Nginx配置X-Forwarded-Proto

    需求 最近公司在做全站https,架构上面有Nginx+tomcat Nginx+php,且nginx配置了ssl,tomcat和php项目使用https协议 但是,发送的是https url请求,p ...

  8. java 加密解密工具类(实用!!!)

    最近发现了一个加密解密的好例子,很方便使用,可以作为平时开发的工具集,记录一下. package com.sh.springboottdemo2.util; import com.sun.org.ap ...

  9. 转:MySQL 的show processlist

    processlist 命令的输出结果显示了有哪些线程在运行,可以帮助识别出有问题的查询语句,两种方式使用这个命令. 1.        进入 mysql/bin 目录下输入 mysqladmin p ...

  10. 【链接】SpringBoot启动错误

    [错误解决]SpringBoot启动错误 https://blog.csdn.net/Small_Mouse0/article/details/78551900