本项目是对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
可导入FTP
,SFTP
,WEBDAV
进行对应协议请求。可以参考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