Skip to content

Base on pycurl, session like requests, spider like scrapy

License

Notifications You must be signed in to change notification settings

glamas/pycurl_session

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

99 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pycurl_session

本项目是对pycurl进行了封装,目的是使pycurl可以像requests.Session和scrapy一样使用,但功能精简。
本项目是业余开发,功能上会不完善,请谨慎使用。
本项目没有发布到pypi等分发平台。

依赖

  • pycurl -- 主要
  • lxml -- 通过xpath解析html内容
  • cssselect -- 通过css解析html内容
  • certifi -- ssl获取证书位置

安装

下载项目内的目录pycurl_session到需要引用的地方。或者

git clone https://github.com/glamas/pycurl_session
cd pycurl_session
python setup.py install

使用

使用Session类,可以参考Session

from pycurl_session import Session

s = Session()
r = s.get(url)
print(r)
r.save("test.html")

使用Schedule类,可以参考Schedule

from pycurl_session.spider import Spider, Schedule

class Test(Spider):
    def __init__(self):
        self.start_urls = []

    def parse(self, response):
        self.log(response.title)

if __name__ == "__main__":
    settings = {}
    schedule = Schedule(settings)
    schedule.add_spider(Test)
    schedule.run()

特点

Session类,简化版本的requests.Session

  • 文件上传
  • http auth认证
  • http和socks代理
  • 自动编码检测,响应类型
  • xpath解析响应
  • css解析响应
  • 使用sqlite3持久保存cookie
  • 表单解析和快捷提交
  • restful api

Schedule类,简化版本的scrapy

  • callback逻辑
  • meta传递数据
  • 支持meta['cookiejar'],对请求使用独立的cookie配置,需要持续传递
  • 设置和默认设置
  • 表单解析和快捷提交
  • 默认任务队列。支持Spider.start_urls, Spider.start_requests(), redis(使用默认Task类,需要安装redis)
  • 自定义任务队列。继承Task类,通过get()返回TaskItem(spider_id, Request)。 可以在add_spider()通过第二个参数task_provider绑定
  • 使用curlmulti进行多线程请求
  • 支持相同域名的延时请求设置(DOWNLOAD_DELAY)
  • item pipeline,支持yield返回字典,仅支持process_item和close_spider
  • 下载中间件,仅支持process_request,process_response和process_exception。另外新增支持process_logstat用于统计
  • 重复请求判断,依据callback和spider_id组合,即不同Spider请求或者请求的callback不一样,不会被过滤
  • 爬虫结束调用closed()
  • 日志设置和自定义格式化
  • 内置Statistics类统计
  • 内置RobotFileParser类,支持robots.txt限制
  • 内置MailSender类,进行简单的邮件发送
  • 其他全局设置,请参考Schedule

其他,仅测试 pycurl_session.client可导入FTPSFTPWEBDAV进行对应协议请求。可以参考Client

已知问题

已知的不完善的地方,请参考Issue

相关仓库

  • pycurl -- A Python Interface To The cURL library
  • requests -- A simple, yet elegant, HTTP library
  • scrapy -- a fast high-level web crawling & scraping framework for Python

使用许可

MIT © glamas

About

Base on pycurl, session like requests, spider like scrapy

Topics

Resources

License

Stars

Watchers

Forks

Languages