编写缘由:
在学习 Scrapy 框架时自我感觉良好, 而 Selenuim 模拟浏览器一样实用, 所以想让他们结合起来做个自用小 Demo
话不多说, 大家请看下面
正文:
请大家先浏览一下, 接下来要爬取的网页
https://www.xiaoheihe.cn/games/index
打开页面
点击 "更多" 按钮, 发现 url 不曾改变
即使换页 url 也还是无动于衷
我也使用谷歌浏览器的禁用 JS 加载, 果然..
所以大家就很容易发现,
这是前台渲染的动态网页
不能单独用 Scrapy 进行爬取
代码部分:
接下来我们编写 Scrapy:
我相信大家对 scrapy 不会太陌生所以接下来重点就不放在这上了, 而以我的想法重点和大家讲一下我的 Selenuim 思路
我的项目结构
Scrapy:
我要获取的是这 4 个元素
然后编写完 Spider 文件后, 就是开始编写我们的下载中间器 middlewares 了:
我是直接修改全局的下载中间器, 添加一个新类, 在里面导入我们的 Selenuim, 在进入到我们所需的页面中我们要先点击 "更多" 按钮, 然后开始爬取. 然后就是进行翻页了, 而这个翻页也困绕了我很久, 我找了许多 scrapy+selenium 的文章还是不得要领, 所以我自个想了个笨方法, 就是下面这几段代码:
需要使用者, 一开始先输入一个数, 实际是请求多少次那个网址
然后就到了下载器那边, 用模拟点击的方法跳转到第 n 页进行爬取
保存: 以字典的格式写入 txt 文件
JSON 文件
MySQL 数据库
在 settings.py 中, 也加入了一些通用的反爬策略 (e.g: 代理服务词还没弄好, 所以基本就是设置 headers(headers 其实也还没有 0.0))
结语:
第一次写文章, 各位不喜勿喷, 亦或觉得哪里不对也可以提出宝贵的意见.
这个小项目的不足之处在于, 全程需要人工输入页码, 而且是输入两次才能爬取出一页内容
虽然这是我第一次发布项目, 觉得有可取之处, 希望可以到我的 GitHub 上送上几颗星, 谢谢各位大佬
源码在我新建的 GitHub 库: https://github.com/Jonnygod/Python.git
(可能以后会改成无头浏览器吧)
来源: http://www.jianshu.com/p/109a708a8120