Pelican plugin that adds site search capability

Overview

Search: A Plugin for Pelican

Build Status PyPI Version

This plugin generates an index for searching content on a Pelican-powered site.

Why would you want this?

Static sites are, well, static… and thus usually don’t have an application server component that could be used to power site search functionality. Rather than give up control (and privacy) to third-party search engine corporations, this plugin adds elegant and self-hosted site search capability to your site. Last but not least, searches are really fast. 🚀

Installation

This plugin uses Stork to generate a search index. Follow the Stork installation instructions to install this required command-line tool and ensure it is available within /usr/local/bin/ or another $PATH-accessible location of your choosing. For example, Stork can be installed on macOS via:

export STORKVERSION="v1.2.1"
wget -O /usr/local/bin/stork https://files.stork-search.net/releases/$STORKVERSION/stork-macos-10-15
chmod +x /usr/local/bin/stork

Confirm that Stork is properly installed via:

stork --help

Once Stork has been successfully installed and tested, this plugin can be installed via:

python -m pip install pelican-search

Settings

This plugin’s behavior can be customized via Pelican settings. Those settings, and their default values, follow below.

SEARCH_MODE = "output"

In addition to plain-text files, Stork can recognize and index HTML and Markdown-formatted content. The default behavior of this plugin is to index generated HTML files, since Stork is good at extracting content from tags, scripts, and styles. But that mode may require a slight theme modification that isn’t necessary when indexing Markdown source (see SEARCH_HTML_SELECTOR setting below). That said, indexing Markdown means that markup information may not be removed from the indexed content and will thus be visible in the search preview results. With that caveat aside, if you want to index Markdown source content files instead of the generated HTML output, you can use: SEARCH_MODE = "source"

SEARCH_HTML_SELECTOR = "main"

By default, Stork looks for

[…]
tags to determine where your main content is located. If such tags do not already exist in your theme’s template files, you can either (1) add
tags or (2) change the HTML selector that Stork should look for.

To use the default main selector, in each of your theme’s relevant template files, wrap the content you want to index with

tags. For example:

article.html:

<main>
{{ article.content }}
main>

page.html:

<main>
{{ page.content }}
main>

For more information, refer to Stork’s documentation on HTML tag selection.

Static Assets

There are two options for serving the necessary JavaScript, WebAssembly, and CSS static assets:

  1. Use a content delivery network (CDN) to serve Stork’s static assets
  2. Self-host the Stork static assets

The first option is easier to set up. The second option is provided for folks who prefer to self-host everything. After you have decided which option you prefer, follow the relevant section’s instructions below.

Static Assets — Option 1: Use CDN

CSS

Add the Stork CSS before the closing tag in your theme’s base template file, such as base.html:

">
<link rel="stylesheet" href="https://files.stork-search.net/basic.css" />

If your theme supports dark mode, you may want to also add Stork’s dark CSS file:

">
<link rel="stylesheet" media="screen and (prefers-color-scheme: dark)" href="https://files.stork-search.net/dark.css">

JavaScript

Add the following script tags to your theme’s base template, just before your closing tag, which will load the most recent Stork module along with the matching WASM binary:

">
<script src="https://files.stork-search.net/releases/v1.2.1/stork.js">script>
<script>
    stork.register("sitesearch", "{{ SITEURL }}/search-index.st")
script>

Static Assets — Option 2: Self-Host

Download the Stork JavaScript, WebAssembly, and CSS files and put them in your theme’s respective static asset directories:

export STORKVERSION="v1.2.1"
cd $YOUR-THEME-DIR
mkdir -p static/{js,css}
wget -O static/js/stork.js https://files.stork-search.net/releases/$STORKVERSION/stork.js
wget -O static/js/stork.wasm https://files.stork-search.net/releases/$STORKVERSION/stork.wasm
wget -O static/css/stork.css https://files.stork-search.net/basic.css
wget -O static/css/stork-dark.css https://files.stork-search.net/dark.css

CSS

Add the Stork CSS before the closing tag in your theme’s base template file, such as base.html:

">
<link rel="stylesheet" href="{{ SITEURL }}/{{ THEME_STATIC_DIR }}/css/stork.css">

If your theme supports dark mode, you may want to also add Stork’s dark CSS file:

">
<link rel="stylesheet" media="screen and (prefers-color-scheme: dark)" href="{{ SITEURL }}/{{ THEME_STATIC_DIR }}/css/stork-dark.css">

JavaScript & WebAssembly

Add the following script tags to your theme’s base template file, such as base.html, just before the closing tag:

">
<script src="{{ SITEURL }}/{{ THEME_STATIC_DIR }}/js/stork.js">script>
<script>
    stork.initialize("{{ SITEURL }}/{{ THEME_STATIC_DIR }}/js/stork.wasm")
    stork.downloadIndex("sitesearch", "{{ SITEURL }}/search-index.st")
    stork.attach("sitesearch")
script>

Search Input Form

Decide in which place(s) on your site you want to put your search field, such as your index.html template file. Then add the search field to the template:

">
Search: <input data-stork="sitesearch" />
<div data-stork="sitesearch-output">div>

For more information regarding this topic, see the Stork search interface documentation.

Deployment

Ensure your production web server serves the WebAssembly file with the application/wasm MIME type. For folks using older versions of Nginx, that might look like the following:

http {
    …
    include             mime.types;
    # Types not included in older Nginx versions:
    types {
        application/wasm                                 wasm;
    }
    …
}

For other self-hosting considerations, see the Stork self-hosting documentation.

Contributing

Contributions are welcome and much appreciated. Every little bit helps. You can contribute by improving the documentation, adding missing features, and fixing bugs. You can also help out by reviewing and commenting on existing issues.

To start contributing to this plugin, review the Contributing to Pelican documentation, beginning with the Contributing Code section.

Comments
  • unexpected keyword argument 'capture_output'

    unexpected keyword argument 'capture_output'

    Installed the module according the installation documentation.

    But get the following error msg: CRITICAL TypeError: init() got an unexpected keyword argument 'capture_output'

    Stork --help, results in the expected output.

    I've added the plugin to the configuration, as well as the settings:

    PLUGINS = [ .....
      'post_stats', 'related_posts', 'search', 'seo', 'simple_footnotes', 'share_post', 'sitemap',
      ....
    ]
    
    SEARCH_MODE = "output"
    SEARCH_HTML_SELECTOR = "main"
    

    Can this be investigated?

    opened by radoeka 8
  • expected newline, found an identifier

    expected newline, found an identifier

    • [X] I have read the Filing Issues and subsequent “How to Get Help” sections of the documentation.
    • [X] I have searched the issues (including closed ones) and believe that this is not a duplicate.

    • OS version and name: FreeBSD 13.0-RELEASE-p4
    • Python version:3.8.12
    • Pelican version: 4.7.1
    • Version of this plugin: 1.0.0

    Steps up to this point:

    • I installed Stork as needed for this plugin via Rustup. stork --version reports 1.3.0.
    • I set up a venv with Pelican and generated some posts using the default theme. It all generated okay.
    • I installed pelican-search via pip in the venv
    • I set edited the theme to add the CDN code and add the search box.
    • I added SEARCH_MODE = "output" and SEARCH_HTML_SELECTOR = "main" to the pelicanconf.py file.
    • I called pelican to regenerate the site.

    After that I got this error.

    CRITICAL Exception: Search plugin         __init__.py:550
                        reported Error: expected                        
                        newline, found an identifier at                 
                        line 438 column 11   
    

    Help! I do not understand Python at all, so I don't have any insight into the issue beyond what I have here. :( I am happy to provide additional information if requested (and given a little instruction on how).

    bug 
    opened by oiseaumanifesto 6
  • How to translate stork?

    How to translate stork?

    • [x] I have searched the issues (including closed ones) and believe that this is not a duplicate.
    • [x] I have searched the documentation and believe that my question is not covered.

    Issue

    How to translate search? My site is in portuguese and the search in english:

    image question 
    opened by paulocoutinhox 3
  • Wrong URL when inside an article

    Wrong URL when inside an article

    • [x] I have read the Filing Issues and subsequent “How to Get Help” sections of the documentation.
    • [x] I have searched the issues (including closed ones) and believe that this is not a duplicate.

    Issue

    Hi,

    When enable search, the stork url is not going to correct place when im inside article:

    image

    Example on screenshot above: http://localhost:8000/2022/06/28/2022/06/28/apocalipse-de-jesus-cristo-fase-3-o-trono-e-os-seres-viventes.html

    duplicated: 2022/06/28/2022/06/28
    

    If im on home, it is working.

    Thanks.

    bug 
    opened by paulocoutinhox 2
  • demo website ?

    demo website ?

    • [x] I have searched the issues (including closed ones) and believe that this is not a duplicate.
    • [x] I have searched the documentation and believe that my question is not covered.
    • [ ] I am willing to lend a hand to help implement this feature. (well, ATM I don't have time, but in a few week why not)

    Feature Request

    Hello ! It could be cool to have a demo site for this plugin ! :D

    enhancement 
    opened by ebanDev 2
  • search.toml

    search.toml

    I have installed the plugin, using Flex theme. I cannot see any search.toml, or instructions on how to generate it.

    • [x] I have searched the issues (including closed ones) and believe that this is not a duplicate.
    • [x] I have searched the documentation and believe that my question is not covered.

    Issue

    Trying to generate my theme, with the search enabled, and I get errors regarding no search.toml file - it is similar to https://github.com/pelican-plugins/search/issues/3 and it appears all I need is a search.toml file. However, I can't see any definitive / suggested configurations for pelican.

    If you could point me in the correct direction that would be superb!

    Thanks

    question 
    opened by Bobspadger 0
  • Escape double quotes in page titles in stork TOML file

    Escape double quotes in page titles in stork TOML file

    Pull Request Checklist

    Resolves: https://github.com/pelican-plugins/search/issues/3#issuecomment-1186287268

    • [x] Conformed to code style guidelines by running appropriate linting tools
    • [x] Updated documentation for changed code

    Description

    If a page title contains a double quote ("), the double quote is rendered into the stork toml file verbatim, creating a syntax error and causing stork to fail.

    This PR escapes double quotes in titles (AFAICT this is the only place where they should appear) with \", fixing the syntax errors.

    opened by s3lph 0
  • Layout issues due to Stork progress bar

    Layout issues due to Stork progress bar

    • [X ] I have searched the issues (including closed ones) and believe that this is not a duplicate.
    • [ X] I have searched the documentation and believe that my question is not covered.

    I have a couple layout issues with the Stork progress bar.

    First it appears in the middle of the article (seemingly where the results box would end).

    Second, more bothersome, blank space appears on the right side of my page, which impacts usability, especially on mobiles when swiping.

    Narrowed down the issue (deleting elements in DevTools until I found the culprit) to this div:

    <div class="stork-progress" style="width: 100%; opacity: 0;"></div>
    

    which is not mine - it seemingly gets inserted by the plugin at build time, and I have not managed to override the inline style via external CSS.

    When width: 0% my layout issue disappears (because the progress bar does not have any space, ie is hidden).

    Where/how can I change width to 0%, or deactivate the progress bar entirely (ie not have this div inserted)? Perhaps better for a future version to define those inline styles in the external CSS?

    question 
    opened by ndeville 0
  • hint to include plugins in pelicanconf.py

    hint to include plugins in pelicanconf.py

    Please include a hint to include plugins=['search'] in the README.MD

    • [x] I have searched the issues (including closed ones) and believe that this is not a duplicate.

    Issue

    opened by kika21 0
  • fix(windows): convert back-slashes to forward-slashes for Windows

    fix(windows): convert back-slashes to forward-slashes for Windows

    1. Summary

    Pelican Stork search doesn’t work correctly on my Windows if OUTPUT_PATH setting is custom.

    After fixing I can successfully use Pelican Stork search:

    404 page search demo

    2. MCVE files

    You can see this MCVE configuration on the KiraPelicanPluginsSitemapStork branch of my demo repository for testing Pelican.

    All files except those listed below are the result of running the command pelican-quickstart.

    1. pelicanconf.py

      """MCVE."""
      
      # [INFO] Default settings
      AUTHOR = 'Sasha Chernykh'
      SITENAME = 'SashaPelicanDebugging'
      SITEURL = 'https://kristinita.netlify.app'
      
      PATH = 'content'
      
      TIMEZONE = 'Europe/Moscow'
      
      DEFAULT_LANG = 'en'
      
      ARTICLE_PATHS = [
          'Articles'
      ]
      
      MARKDOWN = {
          'output_format': 'html5',
      }
      
      
      # [INFO] Settings for this issue
      PLUGINS = [
          'search'
      ]
      
      SEARCH_HTML_SELECTOR = 'body'
      
      OUTPUT_PATH = 'output/'
      
      
    2. content/Articles/KiraArticle.md:

      Slug: KiraArticle
      Title: KiraArticle
      Date: 2020-09-24 18:57:33
      
      Kira Goddess!
      
      
    3. .circleci/config.yml:

      version: 2.1
      
      jobs:
        build:
          machine:
            image: ubuntu-2204:current
          steps:
          - checkout
          - run: pyenv global 3.10.5
          - run: pip install pelican markdown
          - run: pip install pelican-search
          # [INFO] Non-interactive Rust installation on Ubuntu
          # https://stackoverflow.com/a/57251636/5951529
          - run: curl https://sh.rustup.rs -sSf | sh -s -- -y
          - run: cargo install stork-search --locked
          - run: stork --version
          - run: pelican content -s pelicanconf.py --fatal warnings --debug
          - run: ls output
          - run: cat output/search.toml
      
      

    3. Behavior before change

    If custom OUTPUT_PATH on Windows, Pelican Stork search generate invalid path slashes for the value of base_directory setting of search.toml file:

    [input]
    base_directory = "D:\SashaDemoRepositories\SashaPelicanDebugging\output"
    html_selector = "body"
    
    [[input.files]]
    path = "KiraArticle.html"
    url = "/KiraArticle.html"
    title = "KiraArticle"
    

    Incorrect TOML

    If I run:

    pelican content -s pelicanconf.py --fatal warnings --ignore-cache --debug
    

    I get an error:

    Exception: Search plugin reported Error: Couldn't read the configuration file: Cannot parse config as TOML. Stork recieved error: `invalid escape character in string: `S` at line 2 column 22`
    

    Full output:

    D:\SashaDemoRepositories\SashaPelicanDebugging>pelican content -s pelicanconf.py --fatal warnings --ignore-cache --debug
    [11:23:23] DEBUG    Pelican version: 4.8.0                                                                                                                                                                                                                        __init__.py:531
               DEBUG    Python version: 3.10.6                                                                                                                                                                                                                        __init__.py:532
               DEBUG    Adding current directory to system path                                                                                                                                                                                                        __init__.py:66
               DEBUG    Finding namespace plugins                                                                                                                                                                                                                        _utils.py:81
               DEBUG    Namespace plugins found:                                                                                                                                                                                                                         _utils.py:84
                        pelican.plugins.search
                        pelican.plugins.sitemap
               DEBUG    Loading plugin `search`                                                                                                                                                                                                                          _utils.py:90
               DEBUG    Registering plugin `pelican.plugins.search`                                                                                                                                                                                                    __init__.py:73
               DEBUG    Found generator: ArticlesGenerator (internal)                                                                                                                                                                                                 __init__.py:209
               DEBUG    Found generator: PagesGenerator (internal)                                                                                                                                                                                                    __init__.py:209
               DEBUG    Found generator: SearchSettingsGenerator (pelican.plugins.search.search)                                                                                                                                                                      __init__.py:209
               DEBUG    Found generator: StaticGenerator (internal)                                                                                                                                                                                                   __init__.py:209
               DEBUG    Template list: ['!simple/archives.html', '!simple/article.html', '!simple/author.html', '!simple/authors.html', '!simple/base.html', '!simple/categories.html', '!simple/category.html', '!simple/gosquared.html', '!simple/index.html',     generators.py:70
                        '!simple/page.html', '!simple/pagination.html', '!simple/period_archives.html', '!simple/tag.html', '!simple/tags.html', '!simple/translations.html', '!theme/analytics.html', '!theme/archives.html', '!theme/article.html',
                        '!theme/article_infos.html', '!theme/author.html', '!theme/authors.html', '!theme/base.html', '!theme/categories.html', '!theme/category.html', '!theme/comments.html', '!theme/disqus_script.html', '!theme/github.html',
                        '!theme/index.html', '!theme/page.html', '!theme/period_archives.html', '!theme/tag.html', '!theme/taglist.html', '!theme/tags.html', '!theme/translations.html', '!theme/twitter.html', 'analytics.html', 'archives.html', 'article.html',
                        'article_infos.html', 'author.html', 'authors.html', 'base.html', 'categories.html', 'category.html', 'comments.html', 'disqus_script.html', 'github.html', 'gosquared.html', 'index.html', 'page.html', 'pagination.html',
                        'period_archives.html', 'tag.html', 'taglist.html', 'tags.html', 'translations.html', 'twitter.html']
               DEBUG    Read file Articles/KiraArticle.md -> Article                                                                                                                                                                                                   readers.py:547
               DEBUG    Signal article_generator_preread.send(ArticlesGenerator)                                                                                                                                                                                       readers.py:560
               DEBUG    Successfully imported extension module "markdown.extensions.meta".                                                                                                                                                                                core.py:163
               DEBUG    Successfully loaded extension "markdown.extensions.meta.MetaExtension".                                                                                                                                                                           core.py:126
               DEBUG    Signal article_generator_context.send(ArticlesGenerator, <metadata>)                                                                                                                                                                           readers.py:627 [11:23:24] DEBUG    Read file images/.keep -> Static                                                                                                                                                                                                               readers.py:547
               DEBUG    Signal static_generator_preread.send(StaticGenerator)                                                                                                                                                                                          readers.py:560
               DEBUG    Signal static_generator_context.send(StaticGenerator, <metadata>)                                                                                                                                                                              readers.py:627
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/all.atom.xml                                                                                                                                                               writers.py:163
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/articles.atom.xml                                                                                                                                                          writers.py:163
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/sasha-chernykh.atom.xml                                                                                                                                                    writers.py:163
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/sasha-chernykh.rss.xml                                                                                                                                                     writers.py:163
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/all-en.atom.xml                                                                                                                                                            writers.py:163
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/KiraArticle.html                                                                                                                                                                 writers.py:212
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/index.html                                                                                                                                                                       writers.py:212
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/tags.html                                                                                                                                                                        writers.py:212
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/categories.html                                                                                                                                                                  writers.py:212
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/authors.html                                                                                                                                                                     writers.py:212
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/archives.html                                                                                                                                                                    writers.py:212
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/category/articles.html                                                                                                                                                           writers.py:212
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/author/sasha-chernykh.html                                                                                                                                                       writers.py:212
               CRITICAL Exception: Search plugin reported Error: Couldn't read the configuration file: Cannot parse config as TOML. Stork recieved error: `invalid escape character in string: `S` at line 2 column 22`                                               __init__.py:566
    
    ┌─────────────────────────────── Traceback (most recent call last) ────────────────────────────────┐
    │ C:\Python310\lib\site-packages\pelican\plugins\search\search.py:38 in build_search_index         │
    │                                                                                                  │
    │    35 │   │   if not which("stork"):                                                             │
    │    36 │   │   │   raise Exception("Stork must be installed and available on $PATH.")             │
    │    37 │   │   try:                                                                               │
    │ >  38 │   │   │   output = subprocess.run(                                                       │
    │    39 │   │   │   │   [                                                                          │
    │    40 │   │   │   │   │   "stork",                                                               │
    │    41 │   │   │   │   │   "build",                                                               │
    │                                                                                                  │
    │ C:\Python310\lib\subprocess.py:524 in run                                                        │
    │                                                                                                  │
    │    521 │   │   │   raise                                                                         │
    │    522 │   │   retcode = process.poll()                                                          │
    │    523 │   │   if check and retcode:                                                             │
    │ >  524 │   │   │   raise CalledProcessError(retcode, process.args,                               │
    │    525 │   │   │   │   │   │   │   │   │    output=stdout, stderr=stderr)                        │
    │    526 │   return CompletedProcess(process.args, retcode, stdout, stderr)                        │
    │    527                                                                                           │
    └──────────────────────────────────────────────────────────────────────────────────────────────────┘
    CalledProcessError: Command '['stork', 'build', '--input', 'D:\\SashaDemoRepositories\\SashaPelicanDebugging\\output\\search.toml', '--output', 'D:\\SashaDemoRepositories\\SashaPelicanDebugging\\output/search-index.st']' returned non-zero exit status 1.
    
    During handling of the above exception, another exception occurred:
    
    ┌─────────────────────────────── Traceback (most recent call last) ────────────────────────────────┐
    │ C:\Python310\lib\site-packages\pelican\__init__.py:562 in main                                   │
    │                                                                                                  │
    │   559 │   │   │   watcher = FileSystemWatcher(args.settings, Readers, settings)                  │
    │   560 │   │   │   watcher.check()                                                                │
    │   561 │   │   │   with console.status("Generating…"):                                          │
    │ > 562 │   │   │   │   pelican.run()                                                              │
    │   563 │   except KeyboardInterrupt:                                                              │
    │   564 │   │   logger.warning('Keyboard interrupt received. Exiting.')                            │
    │   565 │   except Exception as e:                                                                 │
    │                                                                                                  │
    │ C:\Python310\lib\site-packages\pelican\__init__.py:127 in run                                    │
    │                                                                                                  │
    │   124 │   │                                                                                      │
    │   125 │   │   for p in generators:                                                               │
    │   126 │   │   │   if hasattr(p, 'generate_output'):                                              │
    │ > 127 │   │   │   │   p.generate_output(writer)                                                  │
    │   128 │   │                                                                                      │
    │   129 │   │   signals.finalized.send(self)                                                       │
    │   130                                                                                            │
    │                                                                                                  │
    │ C:\Python310\lib\site-packages\pelican\plugins\search\search.py:113 in generate_output           │
    │                                                                                                  │
    │   110 │   │   │   fd.write(search_settings)                                                      │
    │   111 │   │                                                                                      │
    │   112 │   │   # Build the search index                                                           │
    │ > 113 │   │   build_log = self.build_search_index(search_settings_path)                          │
    │   114 │   │   build_log = "".join(["Search plugin reported ", build_log])                        │
    │   115 │   │   logger.error(build_log) if "error" in build_log else logger.debug(build_log)       │
    │   116                                                                                            │
    │                                                                                                  │
    │ C:\Python310\lib\site-packages\pelican\plugins\search\search.py:52 in build_search_index         │
    │                                                                                                  │
    │    49 │   │   │   │   check=True,                                                                │
    │    50 │   │   │   )                                                                              │
    │    51 │   │   except subprocess.CalledProcessError as e:                                         │
    │ >  52 │   │   │   raise Exception("".join(["Search plugin reported ", e.stdout, e.stderr]))      │
    │    53 │   │                                                                                      │
    │    54 │   │   return output.stdout                                                               │
    │    55                                                                                            │
    └──────────────────────────────────────────────────────────────────────────────────────────────────┘
    Exception: Search plugin reported Error: Couldn't read the configuration file: Cannot parse config as TOML. Stork recieved error: `invalid escape character in string: `S` at line 2 column 22`
    

    4. Change

    I applied os.sep to convert back-slashes to forward-slashes. I change the line of search.py:

    - self.output_path = output_path
    + self.output_path = output_path.replace(os.sep, '/')
    

    5. Behavior after change

    search.toml on Windows after my changes:

    - base_directory = "D:\SashaDemoRepositories\SashaPelicanDebugging\output"
    + base_directory = "D:/SashaDemoRepositories/SashaPelicanDebugging/output"
    

    This is the correct path for Windows. No errors in output.

    D:\SashaDemoRepositories\SashaPelicanDebugging>pelican content -s pelicanconf.py --fatal warnings --ignore-cache --debug
    [11:30:32] DEBUG    Pelican version: 4.8.0                                                                                                                                                                                                                        __init__.py:531
               DEBUG    Python version: 3.10.6                                                                                                                                                                                                                        __init__.py:532
               DEBUG    Adding current directory to system path                                                                                                                                                                                                        __init__.py:66
               DEBUG    Finding namespace plugins                                                                                                                                                                                                                        _utils.py:81
               DEBUG    Namespace plugins found:                                                                                                                                                                                                                         _utils.py:84
                        pelican.plugins.search
                        pelican.plugins.sitemap
               DEBUG    Loading plugin `search`                                                                                                                                                                                                                          _utils.py:90
               DEBUG    Registering plugin `pelican.plugins.search`                                                                                                                                                                                                    __init__.py:73
               DEBUG    Found generator: ArticlesGenerator (internal)                                                                                                                                                                                                 __init__.py:209
               DEBUG    Found generator: PagesGenerator (internal)                                                                                                                                                                                                    __init__.py:209
               DEBUG    Found generator: SearchSettingsGenerator (pelican.plugins.search.search)                                                                                                                                                                      __init__.py:209
               DEBUG    Found generator: StaticGenerator (internal)                                                                                                                                                                                                   __init__.py:209
               DEBUG    Template list: ['!simple/archives.html', '!simple/article.html', '!simple/author.html', '!simple/authors.html', '!simple/base.html', '!simple/categories.html', '!simple/category.html', '!simple/gosquared.html', '!simple/index.html',     generators.py:70
                        '!simple/page.html', '!simple/pagination.html', '!simple/period_archives.html', '!simple/tag.html', '!simple/tags.html', '!simple/translations.html', '!theme/analytics.html', '!theme/archives.html', '!theme/article.html',
                        '!theme/article_infos.html', '!theme/author.html', '!theme/authors.html', '!theme/base.html', '!theme/categories.html', '!theme/category.html', '!theme/comments.html', '!theme/disqus_script.html', '!theme/github.html',
                        '!theme/index.html', '!theme/page.html', '!theme/period_archives.html', '!theme/tag.html', '!theme/taglist.html', '!theme/tags.html', '!theme/translations.html', '!theme/twitter.html', 'analytics.html', 'archives.html', 'article.html',
                        'article_infos.html', 'author.html', 'authors.html', 'base.html', 'categories.html', 'category.html', 'comments.html', 'disqus_script.html', 'github.html', 'gosquared.html', 'index.html', 'page.html', 'pagination.html',
                        'period_archives.html', 'tag.html', 'taglist.html', 'tags.html', 'translations.html', 'twitter.html']
               DEBUG    Read file Articles/KiraArticle.md -> Article                                                                                                                                                                                                   readers.py:547
               DEBUG    Signal article_generator_preread.send(ArticlesGenerator)                                                                                                                                                                                       readers.py:560
               DEBUG    Successfully imported extension module "markdown.extensions.meta".                                                                                                                                                                                core.py:163
               DEBUG    Successfully loaded extension "markdown.extensions.meta.MetaExtension".                                                                                                                                                                           core.py:126
               DEBUG    Signal article_generator_context.send(ArticlesGenerator, <metadata>)                                                                                                                                                                           readers.py:627
               DEBUG    Read file images/.keep -> Static                                                                                                                                                                                                               readers.py:547
               DEBUG    Signal static_generator_preread.send(StaticGenerator)                                                                                                                                                                                          readers.py:560
               DEBUG    Signal static_generator_context.send(StaticGenerator, <metadata>)                                                                                                                                                                              readers.py:627
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/all.atom.xml                                                                                                                                                               writers.py:163
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/articles.atom.xml                                                                                                                                                          writers.py:163
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/sasha-chernykh.atom.xml                                                                                                                                                    writers.py:163
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/sasha-chernykh.rss.xml                                                                                                                                                     writers.py:163
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/feeds/all-en.atom.xml                                                                                                                                                            writers.py:163
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/KiraArticle.html                                                                                                                                                                 writers.py:212
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/index.html                                                                                                                                                                       writers.py:212
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/tags.html                                                                                                                                                                        writers.py:212
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/categories.html                                                                                                                                                                  writers.py:212
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/authors.html                                                                                                                                                                     writers.py:212
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/archives.html                                                                                                                                                                    writers.py:212
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/category/articles.html                                                                                                                                                           writers.py:212
               INFO     Writing D:/SashaDemoRepositories/SashaPelicanDebugging/output/author/sasha-chernykh.html                                                                                                                                                       writers.py:212
               DEBUG    Search plugin reported                                                                                                                                                                                                                          search.py:118
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\css\fonts.css to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\css\fonts.css                                                                                utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\css\main.css to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\css\main.css                                                                                  utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\css\pygment.css to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\css\pygment.css                                                                            utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\css\reset.css to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\css\reset.css                                                                                utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\css\typogrify.css to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\css\typogrify.css                                                                        utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\css\wide.css to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\css\wide.css                                                                                  utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\fonts\font.css to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\fonts\font.css                                                                              utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\fonts\Yanone_Kaffeesatz_400.eot to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\fonts\Yanone_Kaffeesatz_400.eot                                            utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\fonts\Yanone_Kaffeesatz_400.svg to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\fonts\Yanone_Kaffeesatz_400.svg                                            utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\fonts\Yanone_Kaffeesatz_400.ttf to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\fonts\Yanone_Kaffeesatz_400.ttf                                            utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\fonts\Yanone_Kaffeesatz_400.woff to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\fonts\Yanone_Kaffeesatz_400.woff                                          utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\fonts\Yanone_Kaffeesatz_400.woff2 to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\fonts\Yanone_Kaffeesatz_400.woff2                                        utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\aboutme.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\aboutme.png                                                          utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\bitbucket.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\bitbucket.png                                                      utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\delicious.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\delicious.png                                                      utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\facebook.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\facebook.png                                                        utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\github.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\github.png                                                            utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\gitorious.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\gitorious.png                                                      utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\gittip.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\gittip.png                                                            utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\google-groups.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\google-groups.png                                              utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\google-plus.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\google-plus.png                                                  utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\hackernews.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\hackernews.png                                                    utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\lastfm.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\lastfm.png                                                            utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\linkedin.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\linkedin.png                                                        utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\reddit.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\reddit.png                                                            utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\rss.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\rss.png                                                                  utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\slideshare.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\slideshare.png                                                    utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\speakerdeck.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\speakerdeck.png                                                  utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\stackoverflow.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\stackoverflow.png                                              utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\twitter.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\twitter.png                                                          utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\vimeo.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\vimeo.png                                                              utils.py:332
               INFO     Copying C:\Python310\lib\site-packages\pelican\themes\notmyidea\static\images\icons\youtube.png to D:\SashaDemoRepositories\SashaPelicanDebugging\output\theme\images\icons\youtube.png                                                          utils.py:332
               INFO     Copying D:\SashaDemoRepositories\SashaPelicanDebugging\content\images\.keep to D:\SashaDemoRepositories\SashaPelicanDebugging\output\images\.keep                                                                                                utils.py:302
               INFO     Copying D:\SashaDemoRepositories\SashaPelicanDebugging\content\images\.keep to images/.keep                                                                                                                                                 generators.py:906 Done: Processed 1 article, 0 drafts, 0 hidden articles, 0 pages, 0 hidden pages and 0 draft pages in 0.56 seconds
    

    6. UNIX possible consequences

    My change shouldn’t affect *nix operating systems. I check it on Circle CI.

    1. Circle CI build with configuration from the item 2.3 of this issue, generated search.toml:

      [input]
      base_directory = "/home/circleci/project/output"
      html_selector = "body"
      
      [[input.files]]
      path = "KiraArticle.html"
      url = "/KiraArticle.html"
      title = "KiraArticle"
      
    2. I change in my config.yml:

      - - run: pip install pelican-search
      + - run: pip install git+https://github.com/Kristinita/[email protected]
      

    Circle CI build, the same search.toml.

    I didn’t see anything changed in Ubuntu build after my change.

    7. Reproducing problem

    I can’t reproduce my problem on free remote CI services. Unfortunately, installing Stork on Windows isn’t quick. To install Stork, a Windows user must install Rust and compile Stork on his own machine. I can to compile Stork on my machine, but I was getting bugs on Circle CI and AppVeyor CI.

    If you know how to compile Stork for Windows on free remote CI services, please, tell me. See also my issue on the Stork issue tracker.

    8. Environment

    1. Operating system:

      1. Local — Microsoft Windows [Version 10.0.19041.1415]
      2. Circle CI — Ubuntu 22.04 LTS (Jammy Jellyfish)
    2. Python — 3.10.5, 3.10.6

    3. Pelican — 4.8.0

    4. Stork — 1.5.0

    5. pelican-search — 1.0.1

    Thanks.

    opened by Kristinita 0
京东茅台抢购最新优化版本,京东秒杀,添加误差时间调整,优化了茅台抢购进程队列

京东茅台抢购最新优化版本,京东秒杀,添加误差时间调整,优化了茅台抢购进程队列

776 Jul 28, 2021
A tool can scrape product in aliexpress: Title, Price, and URL Product.

Scrape-Product-Aliexpress A tool can scrape product in aliexpress: Title, Price, and URL Product. Usage: 1. Install Python 3.8 3.9 padahal halaman ins

Rahul Joshua Damanik 1 Dec 30, 2021
A Very simple free proxy list scraper.

Scrappp A Very simple free proxy list scraper, made in python The tool scrape proxy from diffrent sites and api's. Screenshots About the script !!! RE

Joji aka Moncef 12 Oct 27, 2022
A list of Python Bots used to extract data from several websites

A list of Python Bots used to extract data from several websites. Data extraction is for products on e-commerce (ecommerce) websites. Data fetched i

Sahil Ladhani 1 Jan 14, 2022
Minecraft Item Scraper

Minecraft Item Scraper To run, first ensure you have the BeautifulSoup module: pip install bs4 Then run, python minecraft_items.py folder-to-save-ima

Jaedan Calder 1 Dec 29, 2021
Open Crawl Vietnamese Text

Open Crawl Vietnamese Text This repo contains crawled Vietnamese text from multiple sources. This list of a topic-centric public data sources in high

QAI Research 4 Jan 05, 2022
Newsscraper - A simple Python 3 module to get crypto or news articles and their content from various RSS feeds.

NewsScraper A simple Python 3 module to get crypto or news articles and their content from various RSS feeds. 🔧 Installation Clone the repo locally.

Rokas 3 Jan 02, 2022
Tool to scan for secret files on HTTP servers

snallygaster Finds file leaks and other security problems on HTTP servers. what? snallygaster is a tool that looks for files accessible on web servers

Hanno Böck 2k Dec 28, 2022
A package designed to scrape data from Yahoo Finance.

yahoostock A package designed to scrape data from Yahoo Finance. Installation The most simple installation method is through PIP. pip install yahoosto

Rohan Singh 2 May 28, 2022
feapder 是一款简单、快速、轻量级的爬虫框架。以开发快速、抓取快速、使用简单、功能强大为宗旨。支持分布式爬虫、批次爬虫、多模板爬虫,以及完善的爬虫报警机制。

feapder 是一款简单、快速、轻量级的爬虫框架。起名源于 fast、easy、air、pro、spider的缩写,以开发快速、抓取快速、使用简单、功能强大为宗旨,历时4年倾心打造。支持轻量爬虫、分布式爬虫、批次爬虫、爬虫集成,以及完善的爬虫报警机制。 之

boris 1.4k Dec 29, 2022
Scrape Twitter for Tweets

Backers Thank you to all our backers! 🙏 [Become a backer] Sponsors Support this project by becoming a sponsor. Your logo will show up here with a lin

Ahmet Taspinar 2.2k Jan 05, 2023
Crawl BookCorpus

These are scripts to reproduce BookCorpus by yourself.

Sosuke Kobayashi 590 Jan 03, 2023
The core packages of security analyzer web crawler

Security Analyzer 🐍 A large scale web crawler (considered also as vulnerability scanner tool) to take an overview about security of Moroccan sites Cu

Security Analyzer 10 Jul 03, 2022
Python framework to scrape Pastebin pastes and analyze them

pastepwn - Paste-Scraping Python Framework Pastebin is a very helpful tool to store or rather share ascii encoded data online. In the world of OSINT,

Rico 105 Dec 29, 2022
Using Selenium with Python to Web Scrap Popular Youtube Tech Channels.

Web Scrapping Popular Youtube Tech Channels with Selenium Data Mining, Data Wrangling, and Exploratory Data Analysis About the Data Web scrapi

David Rusho 0 Aug 18, 2021
Web scraped S&P 500 Data from Wikipedia using Pandas and performed Exploratory Data Analysis on the data.

Web scraped S&P 500 Data from Wikipedia using Pandas and performed Exploratory Data Analysis on the data. Then used Yahoo Finance to get the related stock data and displayed them in the form of chart

Samrat Mitra 3 Sep 09, 2022
京东抢茅台,秒杀成功很多次讨论,天猫抢购,赚钱交流等。

Jd_Seckill 特别声明: 请添加个人微信:19972009719 进群交流讨论 目前群里很多人抢到【扫描微信添加群就好,满200关闭群,有喜欢薅信用卡羊毛的也可以找我交流】 本仓库发布的jd_seckill项目中涉及的任何脚本,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性

50 Jan 05, 2023
中国大学生在线 四史自动答题刷分(现仅支持英雄篇)

中国大学生在线 “四史”学习教育竞答 自动答题 刷分 (现仅支持英雄篇,已更新可用) 若对您有所帮助,记得点个Star 🌟 !!! 中国大学生在线 “四史”学习教育竞答 自动答题 刷分 (现仅支持英雄篇,已更新可用) 🥰 🥰 🥰 依赖 本项目依赖的第三方库: requests 在终端执行以下

XWhite 229 Dec 12, 2022
python+selenium实现的web端自动打卡 + 每日邮件发送 + 金山词霸 每日一句 + 毒鸡汤(从2月份稳定运行至今)

python+selenium实现的web端自动打卡 说明 本打卡脚本适用于郑州大学健康打卡,其他web端打卡也可借鉴学习。(自己用的,从2月分稳定运行至今) 仅供学习交流使用,请勿依赖。开发者对使用本脚本造成的问题不负任何责任,不对脚本执行效果做出任何担保,原则上不提供任何形式的技术支持。 为防止

Sunday 1 Aug 27, 2022
👁️ Tool for Data Extraction and Web Requests.

httpmapper 👁️ Project • Technologies • Installation • How it works • License Project 🚧 For educational purposes. This is a project that I developed,

15 Dec 05, 2021