Skip to content

yidasanqian/Beautyleg7Spider

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 

Repository files navigation

Beautyleg7Spider

项目介绍

一个利用Scrapy框架实现的完整的爬取www.beautyleg7.com网站所有图片的爬虫

软件架构

软件架构说明

安装教程

sql脚本

pip install pywin32
pip install mysql-connector-python
pip install Pillow
pip install PyMySQL
pip install redis
pip install Scrapy
pip install scrapyd
pip install scrapyd-client
pip install SQLAlchemy
pip install pymongo
pip install gevent

使用说明

利用Linux系统的crontab进行定时调度:

首先创建定时调度脚本beautyleg7-schedule.sh:

#!/usr/bin/env bash
curl -u yidasanqian:yidasanqian. http://127.0.0.1:80/scrapyd/schedule.json -d project=beautyleg7 -d spider=Beautyleg7Spider

然后配置定时任务:

使用以下命令配置:

crontab -e

添加内容:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/home/yidasanqian

0 1 * * * $HOME/beautyleg7-schedule.sh >> /var/log/scrapyd/beautyleg7-schedule.log

最后让配置生效:

service crond reload

技术要点

爬虫高性能相关(协程效率最高,IO密集型)

Grequests VS aiohttp+asyncio

爬取过程出现异常中断的解决方案:

  1. 爬取前记录当前爬取的主题页面的URL,存储到Redis key:URL,value:is_persisted(取值为0或1,默认为0)。
  2. 当记录已存储到数据库后,设置Redis对应key的value为1(1表示已持久化到数据库)。
  3. 若步骤1和2中间出现异常导致程序异常中断停止,则恢复时从Redis取得上次爬取的主题页面URL重新爬取。

重复爬取主题页面URL的解决方案:

  1. Redis存储爬取最后一页的页码和最后一条主题URL key:最后一页页码:最后一条主题url,value:is_persisted(取值为0或1,默认为0)。
  2. 每次爬取时检查最后一页是否和Redis中存储的key相同,若不相同则更新key并设置值为0,否则继续下一步。
  3. 当Redis中存储的key的value为1时,开始判断重复的主题URL数,当超过预设的阈值时停止爬取。

参与贡献

  1. Fork 本项目
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published