2011-12-24 6 views
0

これが私のプログラム(Pythonでの)です。最初に、このウェブサイト(locationary.com)にページのhtmlをダウンロードし、そのページからすべてのビジネスページを取得し、それらのビジネスのyellowpages.comリンクをすべて見つけます。それらを見つけた後、Webブラウザモジュールを使用してWebサイトに挿入します。 (コードを読んだら、これはおそらくもっと意味をなさないでしょう)。ウェブサイトにログインしたままで、PythonプログラムのCookieやHTTPヘッダーなどを送信するにはどうしたらいいですか?

まず、私はFirefoxを常にlocationary.comにログインさせる必要があるので、webbrowserモジュールなしでyellowpages.comリンクを送信する方法を欲しています。それはタブで過負荷にならないようにfirefoxを閉じる方法です。私はurllib2とurlopenを使用しようとしましたが、それを実行しても何もしませんでした。今私は、私の要求と共にいくつかのタイプのクッキーまたはhttpヘッダーを送る必要があると思っています。これどうやってやるの?

何かが意味をなさない場合は、私に明示するように依頼してください!

from urllib import urlopen 
from gzip import GzipFile 
from cStringIO import StringIO 
import re 
import urllib 
import urllib2 
import webbrowser 
import mechanize 
import time 
from difflib import SequenceMatcher 
import os 

def download(url): 
    s = urlopen(url).read() 
    if s[:2] == '\x1f\x8b': # assume it's gzipped data 
     with GzipFile(mode='rb', fileobj=StringIO(s)) as ifh: 
      s = ifh.read() 
    return s 

for t in range(0, 1): 
    s = download('http://www.locationary.com/place/en/US/Arizona/Phoenix-page7/?ACTION_TOKEN=NumericAction') 
    findTitle = re.compile('<title>(.*)</title>') 
    getTitle = re.findall(findTitle,s)  
    findLoc = re.compile('http://www\.locationary\.com/place/en/US/.{1,50}/.{1,50}/.{1,100}\.jsp') 
    findLocL = re.findall(findLoc,s) 

    W, X, XA, Y, YA, Z, ZA = [], [], [], [], [], [], [] 

    for i in range(2, 25): 
     print i 

     b = download(findLocL[i]) 
     findYP = re.compile('http://www\.yellowpages\.com/') 
     findYPL = re.findall(findYP,b) 
     findTitle = re.compile('<title>(.*) \(\d{1,10}.{1,100}\)</title>') 
     getTitle = re.findall(findTitle,b) 
     findAddress = re.compile('<title>.{1,100}\((.*), .{4,14}, United States\)</title>') 
     getAddress = re.findall(findAddress,b) 
     if not findYPL: 
      if not getTitle: 
       print "" 
      else: 
       W.append(findLocL[i]) 

      b = download(findLocL[i]) 

      if not getTitle: 
       print "" 
      else: 
       X.append(getAddress) 

      b = download(findLocL[i]) 

      if not getTitle:  
       print "" 
      else: 
       Y.append(getTitle) 

    sizeWXY = len(W) 

    def XReplace(text, d): 
     for (k, v) in d.iteritems(): 
      text = text.replace(k, v) 
     XA.append(text) 

    def XReplace(text, d): 
     for (k, v) in d.iteritems(): 
      text = text.replace(k, v) 
     YA.append(text) 

    for d in range(0, sizeWXY): 
     old = str(X[d]) 
     reps = {' ':'-', ',':'', '\'':'', '[':'', ']':''} 
     XReplace(old, reps) 
     old2 = str(Y[d]) 
     YReplace(old2, reps) 

    count = 0 

    for e in range(0, sizeWXY): 
     newYPL = "http://www.yellowpages.com/" + XA[e] + "/" + YA[e] + "?order=distance" 
     v = download(newYPL) 
     abc = str('<h3 class="business-name fn org">\n<a href="') 
     dfe = str('" class="no-tracks url "') 
     findFinal = re.compile(abc + '(.*)' + dfe) 
     getFinal = re.findall(findFinal, v) 

     if not getFinal: 
      W.remove(W[(e-count)]) 
      X.remove(X[(e-count)]) 
      count = (count+1) 
     else: 
      for f in range(0,1): 
       Z.append(getFinal[f]) 

    XA = [] 
    for c in range(0,(len(X))): 
     aGd = re.compile('(.*), .{1,50}') 
     bGd = re.findall(aGd, str(X[c])) 
     XA.append(bGd) 

    LenZ = len(Z) 

    V = [] 
    for i in range(0, (len(W))): 
     if i == 0: 
      countTwo = 0 

     gda = download(Z[i-(countTwo)]) 
     ab = str('"street-address">\n') 
     cd = str('\n</span>') 
     ZAddress = re.compile(ab + '(.*)' + cd) 
     ZAddress2 = re.findall(ZAddress, gda) 

     for b in range(0,(len(ZAddress2))): 
      if not ZAddress2[b]: 
       print "" 
      else: 
       V.append(str(ZAddress2[b])) 
       a = str(W[i-(countTwo)]) 
       n = str(Z[i-(countTwo)]) 
       c = str(XA[i]) 
       d = str(V[i]) 
       m = SequenceMatcher(None, c, d) 

       if m.ratio() < 0.50: 
        Z.remove(Z[i-(countTwo)]) 
        W.remove(W[i-(countTwo)]) 
        countTwo = (countTwo+1) 

    def ZReplace(text3, dic3): 
     for p, q in dic3.iteritems(): 
      text3 = text3.replace(p, q) 
     ZA.append(text3) 

    for y in range(0,len(Z)): 
     old3 = str(Z[y]) 
     reps2 = {':':'%3A', '/':'%2F', '?':'%3F', '=':'%3D'} 
     ZReplace(old3, reps2) 

    for z in range(0,len(ZA)): 
     findPID = re.compile('\d{5,20}') 
     getPID = re.findall(findPID,str(W[z])) 
     newPID = re.sub("\D", "", str(getPID)) 
     finalURL = "http://www.locationary.com/access/proxy.jsp?ACTION_TOKEN=proxy_jsp$JspView$SaveAction&inPlaceID=" + str(newPID) + "&xxx_c_1_f_987=" + str(ZA[z]) 
     webbrowser.open(finalURL) 
     time.sleep(5) 

    os.system("taskkill /F /IM firefox.exe") 
+0

コードの各行の間に空白行を入れないでください。 [PEP 8](http://www.python.org/dev/peps/pep-0008/)を参照してください: '論理セクションを示すために関数内で空行を余分に使用してください。 ' – Acorn

+0

正規表現でページを解析しないでください。私の経験から、[BeautifulSoup](http://www.crummy.com/software/BeautifulSoup/)は、HTMLを解析するときに、いつでも正規表現よりも信頼性が高い**です。さらに、使いやすくなっています。 – Blender

+0

私はすでにこのすべてを知っています...私は、コードの基本部分(または難しいもの)を修正することに慣れていません...誰かがすでに私と一緒に行って、修正を開始するのを助けました。私はこの質問に対する答えが必要です。 – jacob501

答えて

0

あなたは、ブラウザを使用せずにWebページと対話することができますpycurlを試してみてください:

は、ここに私のコードです。

pycurlは、Cookieの格納(および再利用)、フォームの提出(ログインを含む)、およびPythonからのページのナビゲーションを可能にします。上のコードは、すでにurllibで必要なリソースを取得しているようです。 pycurlサイトでpycurlチュートリアルを実行すると、コードを簡単に変更できます。

JavaScriptを処理する必要性についてのコメントについては、そのコンテキストについて詳しく説明してください。

異なるが関連する投稿here at Stackoverflowは、pycurlでjavascriptに関する質問に対処し、pycurl接続を開始するコードを示しています。

関連する問題