Python Scrapy V2EX 爬虫

Python 语言

大部分人学 Python 都是作为第二语言来学的, 所以既然已经有了其它语言的基础, 我就推荐 2 个小而美的教程, 百页左右, 不啰嗦

先看完这 2 个教程其一, 就可以开始写 Python 了... 遇到不明确的地方再去详细了解, 比如 generator, yield

HTML & CSS & JS

w3school 是入门基础, 要用爬虫获取数据, 必须先了解 HTML 的结构

爬虫

网站爬虫的大体思路是 :

  1. 模拟网站登录请求
  2. 网络请求获取网页源代码
  3. CSS selector 或 xpath 选定需要的元素, 获取内容属性等
  4. 结构化数据并存储到数据库
  5. 定时,并发执行爬虫

Python 爬虫

要写一个爬虫, 可以用一些基本的库, 也可以用爬虫框架 :

基本库

  1. Beautiful Soup : 从 HTML 获取指定的节点及数据
  2. Requests: HTTP for Humans : 网络请求库

最核心的就是这 2 个模块, 其它的数据存储, 定时任务, 多线程等都是锦上添花

不错的教程 Python爬虫利器一之Requests库的用法 Python爬虫利器二之Beautiful Soup的用法 Scrapy笔记11- 模拟登录 Scrapy随机更换User-Agent和实现IP代理池

爬虫框架

  1. Scrapy
  2. PySpider

由于公司原因, 我接触的是 Scrapy

Scrapy 是一个相对成熟的框架, 多线程, 并发数, 中间件, 超时, 自定义 header, UA, 数据库存储, Log, 部署 等等都有成熟的解决方案和示例, 这也是我选择使用它的原因.

不错的教程 scrapy爬虫框架教程(一)-- Scrapy入门 利用Scrapy爬取所有知乎用户详细信息并存至MongoDB(附视频和源码)

部署

Scrapy 官网 可以看到, 官方的部署指南,

动态页面

  1. 有些页面的数据是 JS 动态加载的, 比如懒加载图片, 滚动加载更多等
    • 此时, 我们直接发送网络请求获取到的页面, 并没有执行 JS 代码, 所以懒加载的元素都尚为加载出来, 我们需要下面 2 个库.
  2. Python 代码控制 PhantomJS 加载页面, 然后 Selenium 模拟用户点击, 滚动屏幕, 触发网页中的 AJAX 加载更多内容的请求, 等元素都加载完全, 再爬取数据

Selenium : web的自动测试工具, 模拟点击按钮, 滚动页面等 PhantomJS : 没有界面的浏览器

不错的教程 Python爬虫利器五之Selenium的用法 Python爬虫利器四之PhantomJS的用法

其它

1. 又或者, 你学习爬虫只是想快捷的抓取数据, 你可以尝试下面的软件(网站), 可以不用写代码, 可视化的编写抓取数据的任务
2. 如果你没有自己的服务器, VPS , 可以使用

mLab : 云 MongoDB 服务

Ref

woodenrobot 的 blog 崔庆才的个人博客

最后

文章是我爬取 V2EX 的学习整理

我的 V2 爬虫 : V2EX_Crawler