2016-04-25 17 views
1

コードを何度も何度も何度も繰り返すことなく、美しいスープ/リクエストを使って1つのウェブサイトから複数の異なるページをクロールする方法を知りたいと思います。特定の都市の観光名所をクロールされ、次の私の現在のコードでは、ウェブサイトから複数のページをクロールする(BeautifulSoup、Requests、Python3)

RegionIDArray = [187147,187323,186338] 
dict = {187147: 'Paris', 187323: 'Berlin', 186338: 'London'} 
already_printed = set() 

for reg in RegionIDArray: 
    for page in range(1,700,30): 
     r = requests.get("https://www.tripadvisor.de/Attractions-c47-g" + str(reg) + "-oa" + str(page) + ".html") 

     g_data = soup.find_all("div", {"class": "element_wrap"}) 

     for item in g_data: 
      header = item.find_all("div", {"class": "property_title"}) 
      item = (header[0].text.strip()) 
      if item not in already_printed: 
       already_printed.add(item) 

       print("POI: " + str(item) + " | " + "Location: " + str(dict[reg]) + " | " + "Art: Museum ") 

すべてが期待どおりに動作しますこれまでのところ。次のステップでは、観光名所に加えて、これらの都市で最も人気のある博物館を巡回したいと思います。したがって

、私は必要なすべての博物館を得るために、Cのパラメータを変更することで、要求を変更する必要があります。

r = requests.get("https://www.tripadvisor.de/Attractions-c" + str(museumIDArray) +"-g" + str(reg) + "-oa" + str(page) + ".html") 

したがって私のコードは次のようになります。

RegionIDArray = [187147,187323,186338] 
museumIDArray = [47,49] 
dict = {187147: 'Paris', 187323: 'Berlin', 186338: 'London'} 
already_printed = set() 

for reg in RegionIDArray: 
    for page in range(1,700,30): 
     r = requests.get("https://www.tripadvisor.de/Attractions-c" + str(museumIDArray) +"-g" + str(reg) + "-oa" + str(page) + ".html") 
     soup = BeautifulSoup(r.content) 

     g_data = soup.find_all("div", {"class": "element_wrap"}) 

     for item in g_data: 
      header = item.find_all("div", {"class": "property_title"}) 
      item = (header[0].text.strip()) 
      if item not in already_printed: 
       already_printed.add(item) 

       print("POI: " + str(item) + " | " + "Location: " + str(dict[reg]) + " | " + "Art: Museum ") 

こと正確に正しいとは思わない。私が得たアウトプットには、ある都市のすべての博物館や観光スポットが含まれているわけではありません。

誰でも私を助けることができますか?どんなフィードバックもありがとうございます。

+0

あなたのコードは、辞書にはPythonの組み込みをシャドーイング、コードのバーに行っていることも、エラーでしょうか? –

+0

@PadraicCunninghamあなたが「python組み込み関数をシャドーイングする」とはどういう意味ですか?申し訳ありませんが、私はあなたの神経を鍛えていますが、まだ初心者です。 –

+0

dictはpython型/関数です。組み込み型としてのvriablesの名前。リンクを追加して、それから解析する内容を正確に説明できますか? –

答えて

1

すべての名前は、property_titleクラスのdiv内のアンカータグにあります。

for reg in RegionIDArray: 
    for page in range(1,700,30): 
     r = requests.get("https://www.tripadvisor.de/Attractions-c" + str(museumIDArray) +"-g" + str(reg) + "-oa" + str(page) + ".html") 
     soup = BeautifulSoup(r.content) 

     for item in (a.text for a in soup.select("div.property_title a")): 
      if item not in already_printed: 
       already_printed.add(item) 
       print("POI: " + str(item) + " | " + "Location: " + str(dct[reg]) + " | " + "Art: Museum ") 

ページネーションのdivからのリンクを取得することも良いです:

from bs4 import BeautifulSoup 
import requests 
from urllib.parse import urljoin 


RegionIDArray = [187147,187323,186338] 
museumIDArray = [47,49] 
dct = {187147: 'Paris', 187323: 'Berlin', 186338: 'London'} 
already_printed = set() 

def get_names(soup): 
    for item in (a.text for a in soup.select("div.property_title a")): 
     if item not in already_printed: 
      already_printed.add(item) 
      print("POI: {} | Location: {} | Art: Museum ".format(item, dct[reg])) 

base = "https://www.tripadvisor.de" 
for reg in RegionIDArray: 
    r = requests.get("https://www.tripadvisor.de/Attractions-c[47,49]-g{}-oa.html".format(reg)) 
    soup = BeautifulSoup(r.content) 

    # get links to all next pages. 
    all_pages = (urljoin(base, a["href"]) for a in soup.select("div.unified.pagination a.pageNum.taLnk")[1:]) 
    # use helper function to print the names. 
    get_names(soup) 

    # visit all remaining pages. 
    for url in all_pages: 
     soup = BeautifulSoup(requests.get(url).content) 
     get_names(soup) 
+0

フィードバックに感謝します。しかし、今私は次のエラーメッセージが表示されます:トレースバック(最新の最後の呼び出し): ファイル "C:/Users/Raju/Desktop/Scr​​ipts/nnnn.py"、行25、 get_names(スープ) ファイル"C:/Users/Raju/Desktop/Scr​​ipts/nnnn.py"、15行目、get_names print( "POI:{} |場所:{} |" + "Art:Museum" .format(item。dict [ reg])) AttributeError: 'str'オブジェクトの属性が 'dict'ではありませんか?なにが問題ですか? –

+0

@SeriousRuffy、あなたはdictを使用していましたか? –

+0

@Padriac上記のコードで述べたように、dctにする必要があります。私はちょうど "dict"で試しました。それにもかかわらず、同じエラーメッセージが表示される –

関連する問題