1

コードが機能しています。ここで、複数の URL から日付を取得するために少し変更を加えたいと思いますが、URL の違いは 1 単語だけです。

これが私のコードです。1 つの URL のみから取得しています。

from string import punctuation, whitespace
import urllib2
import datetime
import re
from bs4 import BeautifulSoup as Soup
import csv
today = datetime.date.today()
html = urllib2.urlopen("http://www.99acres.com/property-in-velachery-chennai-south-ffid").read()

soup = Soup(html)
print "INSERT INTO `property` (`date`,`Url`,`Rooms`,`place`,`PId`,`Phonenumber1`,`Phonenumber2`,`Phonenumber3`,`Typeofperson`,` Nameofperson`,`typeofproperty`,`Sq.Ft`,`PerSq.Ft`,`AdDate`,`AdYear`)"
print 'VALUES'
re_digit = re.compile('(\d+)')
properties = soup.findAll('a', title=re.compile('Bedroom'))

for eachproperty in soup.findAll('div', {'class':'sT'}):
  a      = eachproperty.find('a', title=re.compile('Bedroom'))
  pdate  = eachproperty.find('i', {'class':'pdate'})
  pdates = re.sub('(\s{2,})', ' ', pdate.text)
  div    = eachproperty.find('div', {'class': 'sT_disc grey'})
  try:
    project = div.find('span').find('b').text.strip()
  except:
    project = 'NULL'        
  area = re.findall(re_digit, div.find('i', {'class': 'blk'}).text.strip())
  print ' ('
  print today,","+ (a['href'] if a else '`NULL`')+",", (a.string if a else 'NULL, NULL')+ "," +",".join(re.findall("'([a-zA-Z0-9,\s]*)'", (a['onclick'] if a else 'NULL, NULL, NULL, NULL, NULL, NULL')))+","+ ", ".join([project] + area),","+pdates+""
  print ' ), '

同時に取得したいURLは次のとおりです

http://www.99acres.com/property-in-velachery-chennai-south-ffid
http://www.99acres.com/property-in-thoraipakkam-chennai-south-ffid
http://www.99acres.com/property-in-madipakkam-chennai-south-ffid

したがって、すべての URL で異なる単語が 1 つだけあることがわかります。

次のような配列を作成しようとしています

for locality in areas (http://www.99acres.com/property-in-velachery-chennai-south-ffid
, http://www.99acres.com/property-in-thoraipakkam-chennai-south-ffid,    http://www.99acres.com/property-in-madipakkam-chennai-south-ffid):
link = "str(locality)"
html = urllib2.urlopen(link)
soup = Soup(html)

これはまったく機能していないようで、実際には、その 1 つの単語を次のように URL に渡したいだけです。

for locality in areas(madipakkam, thoraipakkam, velachery):
    link = “http://www.99acres.com/property-in-+ str(locality)+-chennai-south-ffid"
    html= urllib2.urlopen(link)
    soup = BeautifulSoup(html)

私はそれを明確にしたことを願っています

4

1 に答える 1

2

これ:

for locality in areas (http://www.99acres.com/property-in-velachery-chennai-south-ffid, http://www.99acres.com/property-in-thoraipakkam-chennai-south-ffid,    http://www.99acres.com/property-in-madipakkam-chennai-south-ffid):
link = "str(locality)"

… 複数の理由でうまくいきません。

areasまず、どこにも定義していない関数を呼び出しています。とにかく、その関数が何をすることを期待していたのかわかりません。

http://www.99acres.com/property-in-velachery-chennai-south-ffid第 2 に、解析可能でさえないのに、意味のある Python 式であるかのように渡そうとしています。文字列を渡したい場合は、引用符で囲む必要があります。

3 番目"str(locality)"は、文字列リテラルstr(locality)です。str変数に対して関数を呼び出したい場合はlocality、引用符で囲まないでください。しかし実際には、電話する理由はまったくありませんstrlocalityすでに文字列です。

for最後に、ループの本体をインデントしませんでした。link =その行と、以前にトップレベルで行っていたすべてのことをインデントする必要があるため、 for. そうすれば、すべてのループが完了した後に合計 1 回だけではなく、ループ内の値ごとに 1 回発生します。

これを試して:

for link in ("http://www.99acres.com/property-in-velachery-chennai-south-ffid",
             "http://www.99acres.com/property-in-thoraipakkam-chennai-south-ffid",
             "http://www.99acres.com/property-in-madipakkam-chennai-south-ffid"):
    # all the stuff you do for each URL

あなたはこれで正しい軌道に乗っていました:

for locality in areas(madipakkam, thoraipakkam, velachery):
link = “http://www.99acres.com/property-in-+ str(locality)+-chennai-south-ffid"

「テンプレート文字列」を使用して繰り返しを避けることは、ほとんどの場合良い考えです。

しかし、繰り返しますが、多くの問題があります。

areasまず、存在しない関数を再度呼び出し、引用符で囲まずにそのままの文字列を使用しようとしました。

第二に、最後の問題とは逆の問題があります: 評価したい式を文字列の途中に入れよう+としました。str(locality)これを、式の一部にできる 2 つの別個の文字列に分割する必要があります+

繰り返しますが、ループ本体をインデントしていないため、str不必要に呼び出しています。

そう:

for locality in "velachery", "thoraipakkam", "madipakkam":
    link = “http://www.99acres.com/property-in-" + locality + "-chennai-south-ffid"
    # all the stuff you do for each URL

その間、文字列を連結する代わりに書式設定関数を使用すると、コードが読みやすくなり、間違いがないことを確認しやすくなります。例えば:

for locality in "velachery", "thoraipakkam", "madipakkam":
    link = "http://www.99acres.com/property-in-{}-chennai-south-ffid".format(locality)
    # all the stuff you do for each URL

ここでは、各地域が文字列のどこに収まるか、文字列がどのように見えるか、ハイフンがどこにあるかなどがすぐにわかります。

于 2013-09-16T06:20:26.350 に答える