import sys import json import requests from bs4 import BeautifulSoup import codecs def scraping(url, output_name): # get a HTML response response = requests.get(url) html = response.text.encode(response.encoding) # prevent encoding errors # parse the response soup = BeautifulSoup(html, "lxml") # extract ## title header = soup.find("head") title = header.find("title").text ## description descriptio
# -*- coding:utf-8 -*- from bs4 import BeautifulSoup def get_soup_uulib2(url): import urllib2 opener = urllib2.build_opener() opener.addheaders = [('User-agent', 'Mozilla/5.0')] page = opener.open(url) soup = BeautifulSoup(page,"lxml") return soup def get_soup_urequests(url): import requests s = requests.Session() r = s.get(url) soup = BeautifulSoup(r.text,"lxml") print soup def get_soup_uselenium
LinkFinder is a python script written to discover endpoints and their parameters in JavaScript files. This way penetration testers and bug hunters are able to gather new, hidden endpoints on the websites they are testing. Resulting in new testing ground, possibility containing new vulnerabilities. It does so by using jsbeautifier for python in combination with a fairly large regular expression. Th
Overview これ の python3 と javascript 版。 javascript でブラウザで動かせるやつが欲しかったのだけど、意外と手こずったので、一度 python で書いてから js で書き直した。 検証はこの辺で。 python3 版 netaddr っていうお手本があるので、これを使うと楽。 ちなみに netaddr.iprange_to_cidrs っていうそのまんまな実装がすでにあるけど、今回は手書きしたかったので使いません。 import netaddr import math def iprange2cidr(start, end): iMask = lambda s: (2**32 - 2**(32-s)) while end >= start: max_size = 32 while max_size > 0: assert 0 < max_size
はじめに データ構造の多くは、破壊的な操作を提供しています。例えば配列はある要素を別の値に更新する操作を提供しています。配列の更新操作の処理時間は配列の長さや値に依存しないという点で優れています。 一方で、データ構造に対して非破壊的な操作を実行したい場面もあるかと思います。例えば配列を累積値とするreduce/fold処理(畳み込み演算)の各計算においては非破壊的に新しい配列を生成すべきです(破壊後の配列を計算結果とすることも可能ですが健全な使い方とは言い難いでしょう)。あるいはReactのステートフックのstate更新のように更新後のオブジェクトを新たにセットする必要がある場合、下記のように非破壊的に新しくオブジェクトを生成しそれをセットさせることになります。
概要 JavaScriptでDOMを作ってるサイトをPythonを使ってスクレイピングしたので、手順をメモ。 大雑把には、ScrapyとSeleniumを組み合わせてやった。 Scrapy Scrapyは、クローラーを実装するためのフレームワーク。 クローラーをSpiderのサブクラス、スクレイピングした情報をItemのサブクラス、スクレイピングした情報に対する処理をPipelineのサブクラス、という風にフレームワークが決めたインターフェースを満たすクラスとしてクローラーを実装する。 scrapyというコマンドが提供されてて、このコマンドを使って、作ったクローラーの一覧を見たり、クローラーを起動したりできる。 Selenium Seleniumは、ブラウザをプログラムから制御するためのツール(でいいのかな?)。Pythonも含めたいろんな言語で使える。 よくWebサイト/アプリの自動テス
ヘッドレスブラウザsplashが便利だったので知見を共有します モチベーション jsで構成されたサイトをスクレイピングしたいなと思い立った時、seleniumがデファクトの選択肢として挙げられると思います。 しかしseleniumの含めヘッドレスブラウザはブラウジングが入ってくるので処理がそれなりに遅くなってしまいます。大量のページをスクレイピングする用途では不向きです。 そこで、サイトをしっかりブラウジングしながらもパフォーマンスを両立するヘッドレスブラウザという要件でseleniumの代わりをさがしていたところ、splashに白羽の矢が立ちました。 splashとは scrapyの開発元であるscrapinghub社が開発しているスクレイピングに特化したヘッドレスブラウザです。 splashは他のヘッドレスブラウザとは毛色が違い、Dockerで配布されるHTTP APIです。 ドキュメ
1.はじめに 前回に引き続き、店舗の緯度経度情報を取得します。 今回はMapion電話帳からチェーン展開している企業の店舗情報を取得します。 汎用性を持たせるため、scrapy実行時に引数で以下項目を渡せるようにしています。 ・genre:ジャンルID ・category:カテゴリID ・chain_store:チェーン展開企業ID 例えば、餃子の王将の場合、以下のようになります。 genre=M01(グルメ)、category=002(ラーメン・餃子)、chain_store=CA01(餃子の王将) 2.実行環境・環境構築 実行環境・環境構築は前回と同じ。 3.scrapy item.py、setting.pyの設定も名称/取得項目以外、前回同様なので割愛。 チェーン店舗のトップページ(例)に店舗一覧が載っています。 ただし、このページからは緯度経度情報を取得できないため、各店舗のlin
FAQにも記されていますが、 non-working localStorage in Private Mode. This is a common issue e.g. for websites based on AngularJS. If rendering doesn’t work, try disabling Private mode (see How do I disable Private mode?). Splashはデフォルトでプライベートモードで立ち上がるらしく、プライベートモードだとlocalStrorageが正常に動作しない場合があるよと、、 私は後述するサイトのレンダリングが当初一向にされなかった(=JavaScriptのコードが未解釈だった)ので--disable-private-modeオプション付でdocker runを行ったところ、キチンとレンダリングされる様
めちゃくちゃ苦労したので共有しようと思います。 使用したもの ー Django, Nuxt, Swift Macのlocalhostで動かしています。実機とMacは同じWi-Fiの元にあることが条件です。 IPアドレスの確認 「システム環境設定」>「ネットワーク」>「Wi-Fi」 するとIPアドレス(192.168.------)が書かれてます。 Django側の設定 settings.pyを開いて、 ALLOWED_HOSTS = ['調べたIPアドレス'] Nuxt側の設定 nuxt.config.jsでlocalhostや127.0.0.1と書いているところを調べたIPアドレスに直す。 例えば、axiosの設定とかだと axios: { host: '調べたIPアドレス', port: 8000 }, 次にpackage.jsonを編集していきます。 "config": { "nux
Webpackの第2弾です 前回はLaravelでしたが今度はDjangoでWebpackを使ってみようと思います 作るものは前回同じVue.jsのツリーです jp.vuejs.org 環境 以下の環境で動かしました Python@3.6.2 Django@2.0.2 Webpack@3.11.0 Vue@2.5.13 webpack-bundle-tracker@0.2.1 css-loader@0.28.10 style-loader@0.20.2 仮想環境とDjangoのインストール 以下のコマンドで環境とDjangoのインストールを行います python3 -m venv env source env/bin/activate pip install django pip install django-webpack-loader プロジェクトを作ります 起動時にワーニングが出てし
この記事は 約 2分41秒 で読めます。 今どきはNuxt.jsなどでフロントエンドを作って、DjangoでAPIを実装するという方法が主流かと思いますが、Djangoのテンプレートにvue.jsを組み込んでみたいと思います。 このログは、こちらのレポジトリでDjango+Dockerセットアップ後の環境を想定しています。 モジュールインストール DjangoでAPIを実現するためのモジュールをインストールします。 make cmd_django pip install djangorestframework pip install django-filter 一旦、djangoコンテナから抜けて(cmd+d)、djangorestframeworkの静的ファイルをstaticフォルダににコピーします。 ※途中、コピー上書きするか聞かれるので「yes」とタイピング。 make collec
vue.jsのDjangoでの使い所 私がつくっているあるアプリではDjangoにバックエンドで使っていますが、フロントエンドはページによってreactとvueを使い分けています。それぞれに長所があると思って両方使っているのですが、今回はvueの話をします。 vueはreactに比べて柔軟な使い方ができる印象です。Django(APIではなくテンプレート)が吐き出したデータを受け取って要素をつくるような書き方ができます。そしてその結果感動するほどHTMLがすっきりするのです!! DjangoとVueを一緒に使う DjangoにVueを組み合わせる方法については私のを含め下記の記事が参考になるでしょう。 Django + Webpack を使ってVueを動かす Django REST framework with Vue.js Django + Vue.js な開発環境を作ろう コード 例え
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く