Python爬虫基础课(一)

对于网络爬虫来说,其本质就是发送http请求,然后提取网页的内容信息进行入库分析等操作。C#、C++、Java、Swift、Golang、Python等语言都可以来编写爬虫应用,而市面上较流行的语言就是Python了。今天听完基础课的第一课,于是做个Python爬虫入门的笔记:

我这边用的编辑器是PyCharm,原生编辑器、Sublime 、Text等都是可以写代码的,看个人习惯,一般非原生编辑器用的比较多,更加智能。

首先,我们先来过一遍HTTP协议,该协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。它是一种短连接的协议,基于TCP。

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。我们主要使用的是Get和Post这两个:

  • GET的信息存储在URL中;
  • POST的信息则把信息存储在form中,比如说我们在输入登陆用户名密码的时候,不会在网址中看到这些隐私信息。

爬虫最主要的处理对象就是URL。比如你在浏览器的地址栏中输入一个URL,打开网页的过程其实就是浏览器作为一个浏览的“客户端”,向服务器端发送了一次请求,把服务器端的文件“抓”到本地,再进行解释、展现。而爬虫就是模拟这个过程,通过URL地址取得所需要的文件内容,然后对它进行进一步的处理。

这里再补充一下URL(统一资源定位符的组成形式:

protocol :// hostname[:port] / path / [;parameters][?query]#fragment(以https://www.baidu.com/index.php?tn=87048150_dg&ch=1为例:

  1. 第一部分是协议(或称为服务方式):https
  2. 第二部分是存有该资源的主机IP地址(有时也包括端口号):www.baidu.com
  3. 第三部分是主机资源的具体地址,如目录和文件名等:index.php?tn=87048150_dg&ch=1
  • 第一部分和第二部分用“://”符号隔开,
  • 第二部分和第三部分用“/”符号隔开。
  • 第一部分和第二部分是不可缺少的,第三部分有时可以省略。

接下来我们开始元素查看:

http://weibo.com/tv/v/FaOp9o8Ct先通过Chrome浏览器下载一个微博上的小视频,来学习如何用Chrome浏览器抓取网络请求。首先打开这个连接,按下F12(或者右键“检查”):

在这个Dock窗口中,有很多个选项卡,主要使用到Elements和NetWork这两个,一个负责审查Html元素,一个负责记录网络请求。目前需要使用网络抓取功能,所以先跳到Network这个选项卡中。

那么多的记录中,如何准确找到视频的URL呢?Network->media

点击这条记录,然后在Headers下有着请求相关的信息,可以看到请求的真实链接地址,这个地址中还带了个mp4,当我们把URL复制后在新的页面打开,可以把视频下载到了本地。

  • 首先,requests.get最基础的用法就是去获取某个网页,如百度首页
r = requests.get('https://www.baidu.com/')

当然我们要保证自己的Python已经安装了requests库,没有的话就pip安装一下

  • 对于带参数的URL,传入一个dict作为params参数
r = requests.get('https://www.douban.com/search', params={'q': 'python', 'cat': '1001'})
  • 传入data参数作为POST请求的数据
requests.post('https://accounts.douban.com/login', data={'form_email': 'abc@example.com', 'form_password': '123456'})

那么接下来我们就来可以用Python来试着下载视频啦(这里我们主要用到get这个请求,requests这个库中自带这个函数,具体用法可以看详细文档):

import requests
response = requests.get('https://us.sinaimg.cn/002ADWB0jx07cnlEmv60010f0100GOzs0k01.mp4?label=mp4_hd&template=template_6&Expires=1534316818&ssig=SLa215YjQw&KID=unistore,video')
with open('E:/video.mp4','wb') as f:
    f.write(response.content)

视频在传输过程中是以二进制流的形式传输的,wb:以二进制写模式打开

(待续……登录案例待补充)

Python turtle库入门学习笔记(一)

Python 海龟绘图——命令尝试

为了方便运用,可以先将引入的turtle命名为tu或者自己习惯的名字。
import turtle as tu

1、朝着画笔方向画直线——tu.forward(距离)

2、转换画笔朝向(左转或者右转)——tu.left(角度)/tu.right(角度)

3、朝着画笔反方向画直线——tu.backward(距离)

4、抬起画笔,可移动但不绘制——tu.penup()

5、放下画笔(默认开始是就是放下的)——tu.pendown()

6、去指定的位置——tu.goto(x,y)

7、指定去往x轴/y轴的位置——tu.setx(数值)/tu.sety(数值)

8、画圆(半径的正负表示圆心在画笔的左右)——tu.circle(半径)

9、直接设置画笔的角度(以水平向右为基准)——tu.setheading(角度)

10、回归起始状态(画笔回到起点,朝向右)——tu.home()