Python 从入门到爬虫极简教程


为什么要学 Python

数据分析需要多个阶段, 抓取数据仅是一个环节, 数据需要不断采集, 更新, 清洗, 分析, 可视会展示等多个阶段, 这些过程中 Python 都能应对自如. 属于性阶适中的工具.

vsc

对比 C 语言, 效率弱一些, 但仅是运行效率, 开发效率高很多, 多数项目恰是开发占比高, 一直开发, 偶尔运行成为常态

vs java

无需编译, 省去很多麻烦, 更适合一次性应用, 或小团队使用, 更灵活.

Life Is Short, Use Python

推荐下我自己创建的Python学习交流群960410445,这是Python学习交流的地方,不管你是小白还是大牛,小编都欢迎,不定期分享干货,包括我整理的一份适合零基础学习Python的资料和入门教程。


Python 语言基础

版本的问题

区别

Python 2.x 和 3.x 有很大区别

2to3

使用 2to3 可以自动升级大部分代码

3.x 新特性

https://www.asmeurer.com/pyth…

版本隔离 virtualenv

$ pip3 install virtualenv

$ virtualenv --no-site-packages venv

$ source venv/bin/activate

(venv)$

(venv)$ deactivate

$

常用数据结构

{} 大字典   Dictionary  键值对, 键唯一, 按键可以很快随机查找

[] 方列表  List  元素存储紧凑, 顺序固定, 可排序

(1,) 圆元组 tuple

set() 设集合 set 集合中,元素唯一,无相同元素

输入输出, 文本处理, 数组处理

input 终端输入

读文件

open(), read() seek()

写文件

写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符’w’或者’wb’表示写文本文件或写二进制文件:

>>> f = open('/Users/michael/test.txt', 'w')

>>> f.write('Hello, world!')

>>> f.close()

数组

面向对象基本概念与使用

如何轻松愉快地学 Python

游戏学编程,熟悉语法, 流程结构, 函数等 https://codecombat.com/ 

ide: pycharm, vs code, 断点调试

Python教程

练习题

猜随机数

成三角形概率

求质数的几种境界

质数概率

png 格式简析

图形格式介绍

png, gif, jpg, svg, webp

特色与难点

装饰器

decorator @

生成器

generator

yeild

lambda 表达式

一些常用函数

zip()

map()

filter()

网络协议与文件格式

URL

协议头://域名:端口/路径/文件?参数1=参数值1&参数2=参数值2#页面锚点

HTTP 协议

https://www.tutorialspoint.co…

无连接: 请求之间不需要保持连接 

媒介无关: MIME 类型确定数据内容

无状态: 用 cookie 或参数跟踪状态

请求头

通过观察 浏览器 -> 开发者工具 学习

重点掌握

Cookie

Referer

User-Agent

Content-Type

请求方法

GET

最常见, 一般通过 url 传递参数, 幂等性

POST

提交操作, 大量数据时, 上传文件时用

响应状态码

200:请求成功 处理方式:获得响应的内容,进行处理

301:请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源 查看头里的 Location

302:请求到的资源在一个不同的URL处临时保存 查看头里的 Location

400:非法请求 

401:未授权 

403:禁止

404:没有找到

500:服务器内部错误

502:错误网关 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。

测试工具

curl

结合浏览器的使用, -o 参数,

wget

断点续传之 -c 参数, 批量下载时的通配符使用

chromium, telnet, netcat

HTML 格式

学习工具

w3cschool.com

json

格式 

工具

JavaScript & CSS

适当了解

python常用抓取工具/类库介绍

urllib

2to3 urllib.py

练习指导:

Python3 启动, 退出 Ctrl+D

2to3 –help 找出 -w 回写参数

两种执行方式, 命令行, 交互式

Requests 库

Scrapy

$ pip installScrapy lxml

PySpider

非常方便并且功能强大的爬虫框架,支持多线程爬取、JS动态解析,提供了可操作界面、出错重试、定时爬取等等的功能,使用非常人性化。

官网

安装

$ pip install pyspider

使用

$ pyspider all

然后浏览器访问 http://localhost:5000

Selenium & PhantomJS

$pip install selenium

用浏览器进行加载页面

驱动浏览器进行搜索


用 PhantomJS 保存页面为图片

PhantomJS 相当于无界面浏览器, 可执行脚本和 CSS 内存渲染

phantomjs helloworld.js

数据提取工具

html, xml, xpath, selector, json

正则表达式

掌握起来, 有一定难度, 多数编辑器支持, 使用场景广, 但不适合结构化数据(xml, json, html)

Python Re模块提供


其于 Dom 模型的 jQuery selector

在 Selenium 中或浏览器中直接使用

基于查询语言的 XPath 标准

XPath语言是基于一个树形结构表示的XML 文档,提供的导航能力,通过多种属性选择节点的一个标准。

XPath 是提取 XML 的工具, 所以需要对 HTML正行校正

校正工具:

BeautifulSoup

ElementTidy

使用 lxml 完成解析 HTML


最稳定的结果是使用 lxml.html 的 soupparser。你需要安装 python-lxml 和 python-beautifulsoup,然后你可以执行以下操作:


Firefox 和 XPath

2017之前的 firefox 版本 + Firebug

2017后 Firefox Developer Edition + Chropath addon

https://addons.mozilla.org/en…

Chromium 和 XPath

在Chrome/ Firefox浏览器中打开网站

按Ctrl + Shift + I(将打开开发人员工具)Alt+CMD+I

选择仪器窗口顶部的“元素”

选择仪器窗口底部的放大镜

在浏览器中选择所需的元素

右键单击DOM树中的选定行,然后选择“复制XPath”

Chrome Extension XPath Helper (需要科学上网)

数据保存

csv 及 excel 格式

注意引号转义, 可用现成库

MySQL 数据库

安装MySQL驱动

由于MySQL服务器以独立的进程运行,并通过网络对外服务,所以,需要支持Python的MySQL驱动来连接到MySQL服务器。MySQL官方提供了mysql-connector-python驱动,但是安装的时候需要给pip命令加上参数–allow-external:

$ pip install mysql-connector-python --allow-external mysql-connector-python

如果上面的命令安装失败,可以试试另一个驱动:

$ pip install mysql-connector

我们演示如何连接到MySQL服务器的test数据库:

# 导入MySQL驱动:

>>> import mysql.connector

# 注意把password设为你的root口令:

>>> conn = mysql.connector.connect(user='root', password='password', database='test')

>>> cursor = conn.cursor()

# 创建user表:

>>> cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')

# 插入一行记录,注意MySQL的占位符是%s:

>>> cursor.execute('insert into user (id, name) values (%s, %s)', ['1', 'Michael'])

>>> cursor.rowcount

1

# 提交事务:

>>> conn.commit()

>>> cursor.close()

# 运行查询:

>>> cursor = conn.cursor()

>>> cursor.execute('select * from user where id = %s', ('1',))

>>> values = cursor.fetchall()

>>> values

[('1', 'Michael')]

# 关闭Cursor和Connection:

>>> cursor.close()

True

>>> conn.close()

爬虫常见问题

常见反爬技术

User-Agent

新华网

Referer

频率

36kr.com

taobao.com

用户点击才展示内容

csdn.net 博客

登录后可用内容

taobao.com

各种人机验证 Captcha

封IP, 封ID

编码问题 GB2312, GB18030, GKB, UTF-8, ISO8859-1

GB18030 > GBK > GB2312 但相互兼容

UTF-8与以上编码不兼容

用代理隐藏 ip

猜你喜欢

转载自blog.csdn.net/qq_40925239/article/details/86299197