• 締切済み

pythonでjavascriptを取得したい

検索結果を自動で取得するツールを作成しています。 ページ内のリンク先URLを取得することはできたのですが リンク先のページにjavascriptが使われていて詰まっております。 import re import pycassa import urllib import urlparse import string import urlparse import json d=urllib.urlopen("最初のページ") print d.read().decode("sjis") aa=d.readlines() d.close() for bb in aa: if(re.search('リンク先',bb)): s="http://(リンク先とつなげて表示)" url2=s+cc2 f=open(url2) data.json.load("f") f.close() print(data) 検索してJSONを使ってみたのですが良い結果にならず、 どう工夫したらよいか教えていただけないでしょうか。

みんなの回答

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.3

あとは、ブラウザの力をかりる。 Mozilla の場合なら、これ! https://developer.mozilla.org/ja/XPCOM/Language_Bindings

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.2

なら、JavaScript Engine のお世話になるしかないね! Python の JavaScript 実装は聞いたことないけど、海外の Python コミュニティで質問してみるのもいいと思うよ? もしなかったら、v8 とか Rhino とかつかうしかないかな。。。

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.1

JavaScript はただのテキストファイルだよ! テキストファイルと同じように扱えばいいような気がするよ?

aili55
質問者

補足

ありがとうございます。 リンク先のフレームの中にとりだしたい文字列があり、 フレームの中身を表示させたいのですが、 そこはHTMLではなくjavascriptで書かれているので・・・。

関連するQ&A

  • Pythonスクリプトが実行できない

     インターネット上で公開されているスクリプトなのですが、実行しようとするとエラーが出てしまいます。どうすれば正しく実行することができるのか、分かる方教えていただけると助かります。よろしくお願いします。  エラーメッセージはスクリプトの下に記載します。  ニコニコ動画にログインし、マイページに新規マイリストを作成して、任意の動画をマイリストに登録するスクリプトです。 #!/usr/bin/env python #coding: utf8 userid="ここにメールアドレスを入力" passwd="ここにパスワードを入力" import sys, re, cgi, urllib, urllib2, cookielib, xml.dom.minidom, time import simplejson as json def getToken(): html = urllib2.urlopen("http://www.nicovideo.jp/my/mylist").read() for line in html.splitlines(): mo = re.match(r'^\s*NicoAPI\.token = "(?P<token>[\d\w-]+)";\s*',line) if mo: token = mo.group('token') break assert token return token def mylist_create(name): cmdurl = "http://www.nicovideo.jp/api/mylistgroup/add" q = {} q['name'] = name.encode("utf8") q['description'] = "" q['public'] = 0 q['default_sort'] = 0 q['icon_id'] = 0 q['token'] = token cmdurl += "?" + urllib.urlencode(q) j = json.load( urllib2.urlopen(cmdurl), encoding='utf8') return j['id'] def addvideo_tomylist(mid,smids): for smid in smids: cmdurl = "http://www.nicovideo.jp/api/mylist/add" q = {} q['group_id'] = mid q['item_type'] = 0 q['item_id'] = smid q['description'] = u"" q['token'] = token cmdurl += "?" + urllib.urlencode(q) j = json.load( urllib2.urlopen(cmdurl), encoding='utf8') time.sleep(0.5) #ログイン opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar())) urllib2.install_opener(opener) urllib2.urlopen("https://secure.nicovideo.jp/secure/login", urllib.urlencode( {"mail":userid, "password":passwd}) ) #トークン取得 token = getToken() #マイリストの作成と動画の登録 mid = mylist_create(u"テストリスト") addvideo_tomylist(mid, ["sm9","sm1097445", "sm1715919" ] ) <エラーメッセージ> >>> #?^í?^°?^¤?^ó ... opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar())) >>> urllib2.install_opener(opener) >>> urllib2.urlopen("https://secure.nicovideo.jp/secure/login", ... urllib.urlencode( {"mail":userid, "password":passwd}) ) <addinfourl at 4311877104 whose fp = <socket._fileobject object at 0x101007758>> >>> #?^?^??^ü?^¯?^ó?^?^??^? ... token = getToken() Traceback (most recent call last): File "<stdin>", line 2, in <module> File "<stdin>", line 8, in getToken UnboundLocalError: local variable 'token' referenced before assignment >>> #?^?^??^¤?^ê?^¹?^?^??^???^??^?^??^???^?^??^Ի?^???^ٻ?^̲ ... mid = mylist_create(u"?^?^??^¹?^?^??^ê?^¹?^?^?") Traceback (most recent call last): File "<stdin>", line 2, in <module> File "<stdin>", line 9, in mylist_create NameError: global name 'token' is not defined >>> addvideo_tomylist(mid, ["sm9","sm1097445", "sm1715919" ] ) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'mid' is not defined >>> <環境>imac, mac os x, ターミナルを使用

    • 締切済み
    • Mac
  • Pythonプログラムのエラー

    こんにちは。pythonプログラムを勉強しはじめたばかりのものです。 次のプログラムが最後の行の#のところでエラーになってなかなか 解決ができません。アドバイスいただけませんでしょうか。 #! /python30/python # coding:shift_jis import sys, os, urllib, gzip def GetAndGzip(url, out): ''' urlを読み込み、gzipで圧縮してファイルoutに出力 ''' remote = urllib.urlopen(url).read() gzfile = gzip.GzipFile(filename='', mode='web', fileobj=out) gzfile.write(remote) gzfile.colse() #パラメータを抽出 if len(sys.argv) <> 2: print '使い方:python wgetgz.py url' else: url = sys.argv[1] GetAndGzip(url, sys.stdout) #ここでエラーin<module> #ここで投稿すると、インデントがなくなってしまうようです。

  • PythonのAPI使用について

    PythonでAPIを用いて情報を取得する練習をしています。 ---------------------------------------------- import urllib2, sys import xml.etree.ElementTree as etree try: railcode = sys.argv[1] except: railcode = '11302' resp = urllib2.urlopen('http://www.ekidata.jp/api/l/%s.xml'%railcode).read() output = {} tree = etree.fromstring(resp) ---------------------------------------------- 山手線のデータを取得し、tree構造を作ろうとしています。 おそらく、treeの中に'ekidata'があり、'line'と'station'のそれぞれのデータが入っていると思うのですが、それぞれのデータをどうやって表示させるのかがわかりません。 ---------------------------------------------- for e in tree: print e print e.tag print e.text ---------------------------------------------- としてみたところ、 ---------------------------------------------- <Element 'line' at 0x10caa0790> line <Element 'station' at 0x10caa0a50> station <Element 'station' at 0x10caa0bd0> station <Element 'station' at 0x10caa0d50> station <Element 'station' at 0x10caa0ed0> station <Element 'station' at 0x10caa5090> station (続く) ---------------------------------------------- のようになり ---------------------------------------------- for e in tree[1]: print e print e.tag print e.text ---------------------------------------------- のようにtreeの一つを選択すると ---------------------------------------------- <Element 'station_cd' at 0x10a06ba90> station_cd 1130201 <Element 'station_g_cd' at 0x10a06bad0> station_g_cd 1130201 <Element 'station_name' at 0x10a06bb10> station_name 大崎 <Element 'lon' at 0x10a06bb50> lon 139.728439 <Element 'lat' at 0x10a06bb90> lat 35.619772 ---------------------------------------------- のようにそれぞれの情報がでてきます。 各treeに収納されているであろうそれぞれの駅のデータから、駅名だけを取り出したりしたいと考えています。 treeの構造がわかっていないことが大きいかもしれません。 何かヒントを与えていただければうれしいです。 よろしくお願いします

  • Python について質問です

    私はPythonの初心者です。 今Python でCSVのファイルを読んで数値だけ(数値以外に文字列や空白などがあります)を計算処理出来なくて困っています。教えて頂けませんか? 質問は、BB.csvというファイルの数値だけの合計と平均を計算したいです。 私のコードは以下です。 # coding: utf-8 import csv import re import string DATAFILE = 'BB.csv' class UnicodeDictReader(csv.DictReader): def __init__(self, f, fieldnames=None): csv.DictReader.__init__( self, f, fieldnames) def main(): total = 0 all_sum = 0 line_num = 0 with open(DATAFILE) as csvfile: reader = UnicodeDictReader(csvfile) for record in reader: # 値を数値で取得 A = int(record['38186']) B = int(record['38181']) C = int(record['38143']) item_total = A + B + C total = item_total all_sum += item_total line_num += 1 average = all_sum / reader.line_num print(" %d + %d + %d = %d " % ( A, B, C, total)) print(u"合計 %d " % all_sum) print(u"平均 %d " % average) if __name__ == '__main__': main() BB.csvは以下です、 38186,38181,38143 1,1,4 1,1,4 ,, ,, 2020,2020,2020 1412,1412,1412 625,625,625 75,75,75 75,75,75 75,75,75 75,75,75 4,4,4 4,4,4 4,4,4 7828,7828,7828 X,, 0,0,0 0,0,0 ○,, 0,0,0 0,0,0 0,0,0 ,,AAA 0,0,0 0,0,0 0,0,0 ,BBB, 0,0,0 0,0,0 0,0,0 ,, 0,0,0 ,, 0,0,0 0,0,0 ,, 0,0,0 0,0,0 750,750,750 400,400,400 400,400,400 ,, 0,0,0 0,0,0 0,0,0 ,, 0,0,0 0,0,0 0,0,0 0,0,0 0,0,0 0,0,0 0,0,0 6,6,6 6,6,6 18,18,18 18,18,18 18,18,18 18,18,18 18,18,18 16,16,16 16,16,16 6,6,6 6,6,6 18,18,18 18,18,18 18,18,18 18,18,18 18,18,18 11,11,11 11,11,11 11,11,11 3,3,3 3,3,3 3,3,3 3,3,3 4,4,4 4,4,4 3,3,3 3,3,3 16,16,16 16,16,16 16,16,16 14,8,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 15,15,15

  • pythonでスクレイピングがうまく出来ません

    python2.7でbeautifulsoupを用いて、netkeiba.comから競馬情報(騎手の成績)をスクレイピングしています。 定法に基づきまして、『検証』からページのツリー構造を把握して、プログラムを作成しました。 馬名部分の構造が<td class="txt_l"> <a href="/horse/2011105901">テンテマリ</a></td> #テンテマリは馬名 となっておりましたので、"txt_l"を拾い出せるようにスクリプトを作りました。 しかしながら、 馬名以外の"txt_l"は全部スクレイピング出来るのですが、馬名部分だけがNoneと返ってまいります。 エラーメッセージではありませんが、何が原因でNoneとなるのかが、どうしても分かりません。 ちなみに、馬名以外で、ほぼ同様の構造を持つ、『レース名』、構造は <td class="bml txt_l"> <a href="/race/201603020812/" title="3歳上500万円下">3歳上500万円下</a> (3歳上500万円下はレース名) では、問題なくレース名を拾うことが出来ました。 該当のソースコード -*- coding:utf-8 -*- import urllib2 import codecs from bs4 import BeautifulSoup tpl_url='http://db.netkeiba.com/?pid=jockey_detail&id=00663&page={0}' for i in xrange( 1, 2 ): url=tpl_url.format( i ) soup = BeautifulSoup(urllib2.urlopen(url).read(),"lxml") tr_arr = soup.find('div', {'id':'contents_liquid'}).findAll('tbody') for tr in tr_arr: lrg1 = tr.findAll('td',{'class':'txt_l'}) for tr1 in lrg1: print tr1.string 試したこと 馬名以外の('td',{'class':'txt_l'})に準ずる『レース名』は、うまく拾うことが出来ました。 lrg1 = tr.findAll('td',{'class':'txt_l'}) で馬名を得ることが出来ない理由、併せて馬名を拾えるスクリプトを御教示くださいますよう、よろしくお願いいたします!

  • csvファイルに保存が出来ずに困っています!!

    python初心者でございます。 python2.7,beautifulsoupを用いて競馬情報をスクレイピングしましたが、 作成されたhorse.csvファイルにデータ保存が出来ず、困っております。 csvファイルに保存出来るスクリプトを、御教示よろしくお願いいたします。 小生が作成したソースコード -*- coding:utf-8 -*- import urllib2 import codecs from bs4 import BeautifulSoup f = codecs.open('horse.csv', 'w', 'utf-8') f.write('tr1') tpl_url='http://db.netkeiba.com/?pid=jockey_detail&id=00663&page={0}' for i in xrange( 1, 2 ): url=tpl_url.format( i ) soup = BeautifulSoup(urllib2.urlopen(url).read(),"lxml") tr_arr = soup.find('div', {'id':'contents_liquid'}).findAll('tbody') for tr in tr_arr: lrg1 = tr.findAll('td',{'class':'txt_l'}) for tr1 in lrg1: print tr1.a.string f.close() 試したこと 上記のプログラムを動かすと作成されたCSVファイルには何も記録、保存されておりませんでした。 御教示よろしくお願いいたします!!!

  • javascriptでjsonの解析で困っています

    以下のようなjsonのデータの中から、ccと33をとりだし、変数に代入しようとしています。 jsonのデータは読み込めているのですが、その後の var myData = JSON.parse(this.responseText); x = myData.we[0][2][0]; y = myData.we[0][2][1]; としてるのですが、代入ができていません。データの構造が間違っていますか?x = myData.we[0][2][0];  y = myData.we[0][2][1]; の部分が間違っていますか?javascript jsonについては初心者です。詳しく教えていただきたく思い投稿しました。よろしくお願いします。 ------ json --------------------------------------- { "wd":[ [          ["a",1],["b",2],["c",3],["d",4],["e",5]      ], [          ["f",6],["g",7],["h",8],["i",9],["j",0]      ] ], "we":[ [          ["aa",11],["bb",22],["cc",33],["dd",44],["ee",55]      ], [          ["ff",66],["gg",77],["hh",88],["ii",99],["jj",00]      ] ] }

  • definedの使い方が間違ってますか?

    こんばんは。 色々試してみたのですが、どうしてもうまくいかないので質問させてください。 リストの$f1とファイルの$aaがマッチして、 かつリストの$f3とファイルの$bbがマッチした場合に、 $f4を付け加えてprintしたいのですが、 ★マークの処理で、リストの$f3とファイルの$bbがマッチしていないものまで printされてしまうことがあります。 $aaとマッチするものがリストに2つ以上ある時にこの現象がおきるようなのですが、 どの辺を直したらよいのかわかりません。 definedの使い方がおかしいのでしょうか? 見よう見まねで書いたので、▲マークあたりの指定も自信がありません。 #リスト読み込み open LIST, "./list" or die; while (<LIST>) { chomp; if (/(.*) (.*) (.*) (.*)/) { $f1 = $1; $f2 = $2; $f3 = $3; $f4 = $4; } $xx{$f1} = $f4; #▲ $yy{$f1} = $f3; #▲ } close LIST; #ファイル読み込み if ($#ARGV >= 0) { @files = @ARGV; } foreach $file (@files) { open FILE, $file; while (<FILE>) { chomp; if (/^([^t]+)\t(.*)$/) { $aa = $1; $bb = $2; if (defined($xx{$aa})) { if (defined($yy{$bb})) { # ★ print "$aa\t$bb\t\#【$xx{$aa}】\n"; } } } } close FILE; } どうかご教示お願いいたします。

    • ベストアンサー
    • Perl
  • ホームページの作り方

    ホームページを作ってるのですが、 トップページ(aa.htm)からbb.htmへリンクして そこからまた『戻る』でトップページにいきたいのですが、どうすればいいのですか? bb.htmでaa.htmにリンクさせたのですが でませんでした。 素人ですみませんが教えてください

  • Javascriptについて

    Javascriptについて JavaScriptについて質問です。 ページを移動する際にonUnloadを使って関数を呼び出し、 移動先のページのURLを取得(<A href="">のリンク以外による移動でも可能な)したいのですが、 可能でしょうか?よろしくお願いします。

専門家に質問してみよう