これが私のプログラム(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")
コードの各行の間に空白行を入れないでください。 [PEP 8](http://www.python.org/dev/peps/pep-0008/)を参照してください: '論理セクションを示すために関数内で空行を余分に使用してください。 ' – Acorn
正規表現でページを解析しないでください。私の経験から、[BeautifulSoup](http://www.crummy.com/software/BeautifulSoup/)は、HTMLを解析するときに、いつでも正規表現よりも信頼性が高い**です。さらに、使いやすくなっています。 – Blender
私はすでにこのすべてを知っています...私は、コードの基本部分(または難しいもの)を修正することに慣れていません...誰かがすでに私と一緒に行って、修正を開始するのを助けました。私はこの質問に対する答えが必要です。 – jacob501