You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

94 lines
2.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## Scrapy-Redis-Zhihu项目介绍
1. 基于scrapy-redis实现分布式爬虫爬取知乎所有问题及对应的回答
2. 集成selenium模拟登录知乎并处理英文验证码及倒立文字验证码的识别
3. 通过Twisted将MySQL 入库操作变成异步化执行;
4. 集成bloomfilter对URL进行去重
5. 随机生成User-Agent、IP代理应该反爬
6. 通过scrapy信号机制统计爬取的URL总数
7. 通过Scrapy数据收集机制获取爬取失败的URL并写入到json文件中方便后期进行分析。
## Scrapy-Redis-Zhihu项目结构介绍
captcha: 存放知乎登录页面英文验证码或倒立文字验证码图片
cookies: 存放登录之后获取到的cookies
failed_urls: 存放爬取失败的url信息
libs存放Scrapy编写过程中需要用到的函数
libs.bloomfilter: 布隆过滤器对url进行去重
libs.chaojiying: 英文验证码识别
libs.common: 其他函数
libs.proxy: 获取西刺ip代理
spiders: 项目文件
zheye: 倒立文字验证码识别相关文件
## Scrapy-Redis-Zhihu重要方法介绍
spiders.zhihu.py:
get_cookies模拟登录知乎将登录后的cookies写入文件中并返回登录之后的cookies
deal_with_chinese_captcha: 倒立验证码的识别
deal_with_english_captcha: 英文验证码的识别
middlewares.RedirectDealDownloaderMiddleware.process_response: 因为scrapy-redis中的start_requests已经被重写过了无法将登录后的cookies传入到Response中所以在这里进行捕获登录页面模拟登录并将获取登录后的cookies并传入到Response中同时处理302重定向到登录页面问题
## 如何使用
### 安装依赖
```
git clone https://github.com/Yanxueshan/Scrapy-Redis-Zhihu.git
cd Scrapy-Redis-Zhihu
pip install -r requirements.txt
```
### 参数修改
settings.py中的某些参数需要修改
这是数据库MySQL相关配置修改为自己的MySQL配置
```
MYSQL_HOST = 'localhost'
MYSQL_DBNAME = 'zhihu'
MYSQL_USER = 'root'
MYSQL_PASSWORD = 'root'
```
这是知乎的账号和密码,供模拟登录使用,修改为自己的知乎账号和密码
```
ZHIHU_ACCOUNT = 'username'
ZHIHU_PASSWORD = 'password'
```
这是超级鹰的账号用来识别英文验证码修改为自己的超级鹰账号也可以换成其他第三方平台不过相应的zhihu.py中的代码要改变
```
CHAOJIYING_ACCOUNT = 'username'
CHAOJIYING_PASSWORD = 'password'
CAPTCHA_TYPE = '898966'
```
### 运行前准备
切换到redis安装目录下启动redis-server
```
cd redis
redis-server.exe redis.windows.conf
```
另起一个窗口启动redis-cli
```
cd redis
redis-cli
```
### 运行
```
redis-cli lpush zhihu:start_urls http://www.zhihu.com/signin
cd Scrapy-Redis-Zhihu
python main.py
```