Closed3

SEOとかサイト管理のためにPythonでサイトクロールする

Yusuke KawabataYusuke Kawabata

ググって出てくるのは非エンジニア向けツールが多いが、Pythonのクローラを入れたら一発でできた。

https://advertools.readthedocs.io/en/master/advertools.spider.html

import advertools as adv

adv.crawl('https://example.com/', 'example.jl', follow_links=True, 
        allowed_domains=['example.com'], 
        custom_settings={'LOG_FILE': 'crawler.log', 'USER_AGENT': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 /seochecker'})
Yusuke KawabataYusuke Kawabata

出力されたファイルは1行ごとのJSON(Json Lines)形式になっている。pandasなどのライブラリで扱えるが、今回は必要な項目だけどとりだしてCSVにしたいので、DocWriterを使って書き出す。

from csv import DictWriter
import json

with open("example.jl", 'r') as inp, open("example-export.csv", 'w') as outp:
    writer = DictWriter(outp, fieldnames=[
            'url', 'title', 'meta_desc', 'charset', 'h1', 'h2','h3','h4','canonical', 'og:title', 'og:url', 'og:description', 'og:type', 'og:site_name','og:image' ], extrasaction='ignore')
    for line in inp:
        row = json.loads(line.replace("\\r\\n", "").replace("\\n", ""))
        writer.writerow(row)

改行が不要なのでパース前に除去しているのと、不要なカラムを切り捨てるため extrasaction='ignore' を指定している。

Yusuke KawabataYusuke Kawabata

ひっかかった点はほとんどないが、依存ライブラリのScrapyが、グローバルインストールしないとだめなので、sudoでpipを実行しないと動作しなかったくらいかな。Pythonさわらないのでsudoで入れるのが正しいのかはわからん。

このスクラップは2022/12/03にクローズされました