授权协议: GPLv3
开发语言: Python 查看源码 »
操作系统: 跨平台
收录时间: 2019-02-11
提 交 者: CrawlScript

WebCollector-Python

WebCollector-Python 是一个无须配置、便于二次开发的 Python 爬虫框架(内核),它提供精简的的 API,只需少量代码即可实现一个功能强大的爬虫。

WebCollector Java版本

WebCollector Java版相比WebCollector-Python具有更高的效率: https://github.com/CrawlScript/WebCollector

安装

pip安装命令

pip install https://github.com/CrawlScript/WebCollector-Python/archive/master.zip

示例

Basic

快速入门

自动探测URL

demo_auto_news_crawler.py:

# coding=utf-8
import webcollector as wc


class NewsCrawler(wc.RamCrawler):
    def __init__(self):
        super().__init__(auto_detect=True)
        self.num_threads = 10
        self.add_seed("https://github.blog/")
        self.add_regex("+https://github.blog/[0-9]+.*")
        self.add_regex("-.*#.*")  # do not detect urls that contain "#"

    def visit(self, page, detected):
        if page.match_url("https://github.blog/[0-9]+.*"):
            title = page.select("h1.lh-condensed")[0].text.strip()
            content = page.select("div.markdown-body")[0].text.replace("\n", " ").strip()
            print("\nURL: ", page.url)
            print("TITLE: ", title)
            print("CONTENT: ", content[:50], "...")


crawler = NewsCrawler()
crawler.start(10)

手动探测URL

demo_manual_news_crawler.py:

# coding=utf-8
import webcollector as wc


class NewsCrawler(wc.RamCrawler):
    def __init__(self):
        super().__init__(auto_detect=False)
        self.num_threads = 10
        self.add_seed("https://github.blog/")

    def visit(self, page, detected):

        detected.extend(page.links("https://github.blog/[0-9]+.*"))

        if page.match_url("https://github.blog/[0-9]+.*"):
            title = page.select("h1.lh-condensed")[0].text.strip()
            content = page.select("div.markdown-body")[0].text.replace("\n", " ").strip()
            print("\nURL: ", page.url)
            print("TITLE: ", title)
            print("CONTENT: ", content[:50], "...")


crawler = NewsCrawler()
crawler.start(10)

用detected_filter插件过滤探测到的URL

demo_detected_filter.py:

# coding=utf-8
import webcollector as wc
from webcollector.filter import Filter
import re


class RegexDetectedFilter(Filter):
    def filter(self, crawl_datum):
        if re.fullmatch("https://github.blog/2019-02.*", crawl_datum.url):
            return crawl_datum
        else:
            print("filtered by detected_filter: {}".format(crawl_datum.brief_info()))
            return None


class NewsCrawler(wc.RamCrawler):
    def __init__(self):
        super().__init__(auto_detect=True, detected_filter=RegexDetectedFilter())
        self.num_threads = 10
        self.add_seed("https://github.blog/")

    def visit(self, page, detected):

        detected.extend(page.links("https://github.blog/[0-9]+.*"))

        if page.match_url("https://github.blog/[0-9]+.*"):
            title = page.select("h1.lh-condensed")[0].text.strip()
            content = page.select("div.markdown-body")[0].text.replace("\n", " ").strip()
            print("\nURL: ", page.url)
            print("TITLE: ", title)
            print("CONTENT: ", content[:50], "...")


crawler = NewsCrawler()
crawler.start(10)

用RedisCrawler进行可断点的采集(可在关闭后恢复)

demo_redis_crawler.py:

# coding=utf-8
from redis import StrictRedis
import webcollector as wc


class NewsCrawler(wc.RedisCrawler):

    def __init__(self):
        super().__init__(redis_client=StrictRedis("127.0.0.1"),
                         db_prefix="news",
                         auto_detect=True)
        self.num_threads = 10
        self.resumable = True # you can resume crawling after shutdown
        self.add_seed("https://github.blog/")
        self.add_regex("+https://github.blog/[0-9]+.*")
        self.add_regex("-.*#.*")  # do not detect urls that contain "#"

    def visit(self, page, detected):
        if page.match_url("https://github.blog/[0-9]+.*"):
            title = page.select("h1.lh-condensed")[0].text.strip()
            content = page.select("div.markdown-body")[0].text.replace("\n", " ").strip()
            print("\nURL: ", page.url)
            print("TITLE: ", title)
            print("CONTENT: ", content[:50], "...")


crawler = NewsCrawler()
crawler.start(10)

用Requests定制Http请求

demo_custom_http_request.py:

# coding=utf-8

import webcollector as wc
from webcollector.model import Page
from webcollector.plugin.net import HttpRequester

import requests


class MyRequester(HttpRequester):
    def get_response(self, crawl_datum):
        # custom http request
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"
        }

        print("sending request with MyRequester")

        # send request and get response
        response = requests.get(crawl_datum.url, headers=headers)

        # update code
        crawl_datum.code = response.status_code

        # wrap http response as a Page object
        page = Page(crawl_datum,
                    response.content,
                    content_type=response.headers["Content-Type"],
                    http_charset=response.encoding)

        return page


class NewsCrawler(wc.RamCrawler):
    def __init__(self):
        super().__init__(auto_detect=True)
        self.num_threads = 10

        # set requester to enable MyRequester
        self.requester = MyRequester()

        self.add_seed("https://github.blog/")
        self.add_regex("+https://github.blog/[0-9]+.*")
        self.add_regex("-.*#.*")  # do not detect urls that contain "#"

    def visit(self, page, detected):
        if page.match_url("https://github.blog/[0-9]+.*"):
            title = page.select("h1.lh-condensed")[0].text.strip()
            content = page.select("div.markdown-body")[0].text.replace("\n", " ").strip()
            print("\nURL: ", page.url)
            print("TITLE: ", title)
            print("CONTENT: ", content[:50], "...")


crawler = NewsCrawler()
crawler.start(10)
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

WebCollector-Python 的相关资讯

还没有任何资讯

WebCollector-Python 的相关博客

webcollector爬虫框架

WebCollector 是一个无须配置、便于二次开发的 JAVA 爬虫框架(内核),提供精简的的 API,只需少量代码即可实现一个功能强大...

maven webcollector java.lang.ClassNotFoundException: org.openqa.selenium.remote.SessionNotFoundEx...

使用webcollector时出现了如下异常 分析是依赖的问题,不仅要添加selenium-java,还要添加htmlunit-driver的依赖,注意不要添加成...

webcollector + selenium 爬取空间相册图片

1 package cn.hb.util; 2 3 import java.io.File; 4 import java.io.FileNotFoundException; 5 import java.io....

webcollector 2.x 爬取搜狗搜索结果页

1 /** 2 * 使用搜狗搜索检索关键字并爬取结果集的标题 3 * @author tele 4 * 5 */ 6 public class SougouCraw...

WebCollector

WebCollector 2.x官网和镜像: 官网:https://github.com/CrawlScript/WebCollector 镜像:http://git.oschina.net/webcolle...

Windows7 --下python3和python2同时 安装python3和python2

1、下载python3和python2 进入python官网,链接https://www.python.org/ 选择Downloads--->Windows,点击进入就可以看到寻找想...

linux下python2升级python3,python2和python3并存

wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz 解压:tar -xzvf Python-3.6.4.tgz cd Python-3.6.4 /usr/l...

WebCollector-Python 的相关问答

还没有任何问答,马上提问

评论 (9)

加载中

引用来自“笑笑小兵”的评论

有golang版本不?

引用来自“CrawlScript”的评论

可以考虑以后出golang版
期待+1
2019/02/13 17:04
回复
举报
求golang版本
2019/02/13 10:08
回复
举报
CrawlScript软件作者

引用来自“科技范麒麟才子”的评论

还是喜欢用 java版
Java版的确效率高、稳定还有强类型保障。 但是有一些场景有Python需求,比如科研人员如果用TensorFlow/PyTorch做机器学习的话,前面数据采集直接用Python会自然一些。😃
2019/02/12 16:41
回复
举报

引用来自“笑笑小兵”的评论

有golang版本不?

引用来自“CrawlScript”的评论

可以考虑以后出golang版
期待!
2019/02/12 14:00
回复
举报
还是喜欢用 java版
2019/02/12 13:55
回复
举报
CrawlScript软件作者

引用来自“笑笑小兵”的评论

有golang版本不?
可以考虑以后出golang版
2019/02/12 12:50
回复
举报
有golang版本不?
2019/02/12 12:13
回复
举报
CrawlScript软件作者

引用来自“zhaohengchao”的评论

相比于scrapy有何优势?
简单粗暴
2019/02/12 12:11
回复
举报
相比于scrapy有何优势?
2019/02/12 11:30
回复
举报
更多评论
9 评论
107 收藏
分享
在线直播报名
返回顶部
顶部