2016-05-26 15 views
1

ウェブスクレイピングを開始しました。私は以下の特定のページからURLを取得したいと考えています。BeautifulSoupを使用してウェブページのURLをスクラップする方法

import requests 
from bs4 import BeautifulSoup as Soup 

page = "http://www.zillow.com/homes/for_sale/fore_lt/2-_beds/any_days/globalrelevanceex_sort/57.610107,-65.170899,15.707662,-128.452149_rect/3_zm/"  

response = requests.get(page) 
soup = Soup(response.text) 

さて、私はスープのコンテンツ内のページのすべての情報を持っていると私はビデオのいずれかをINSPECTとき、私は画像 enter image description here

で提供されているすべての家庭のURLを取得したいと思います家の、クロームは画像では、このDOM要素を開きます。

enter image description here

にはどうすれsoupを使用して<a href="">タグ内のリンクを取得するのでしょうか?親は<div id = "lis-results">だと思いますが、要素に移動する方法が必要です。実際には、テキストファイルにすべてのURL(391,479)が必要です。

Zillowにはこの種のデータジョブの便宜のためのAPIとPythonラッパーがあり、現在コードを探しています。私が得る必要があるのは、FOR SALE - >差し押さえと潜在的なリスト - >差し押さえられ、差し押さえられる前の情報のURLです。

+1

[Zillow data API](http://www.zillow.com/howto/api/APIOverview.htm)を使用すると、[Python wrapper](https://github.com)があります。/hanneshapke/pyzillow)、ところで。 – alecxe

+0

これは本当に役に立ちますが、私はAPIの使い方を学ぶ必要があります。 – Arefe

答えて

3

問題は送信したリクエストがURLを取得しないことです。 Missing the important part

は、私は別の戦略を示唆している:ウェブサイトのこれらの種類は、多くの場合、JSONファイルを介して通信し、私は応答を見れば実際に、私は得る(例えばjupyter使用)。あなたはJSONファイルを要求するためのURLを見つけることができるFirefoxでWeb DeveloperNetworkタブから

Firefox Network Tab

、このファイルを使用して、あなたが必要なすべての情報を得ることができます。

import json 
page = "http://www.zillow.com/search/GetResults.htm?spt=homes&status=110001&lt=001000&ht=111111&pr=,&mp=,&bd=2%2C&ba=0%2C&sf=,&lot=,&yr=,&pho=0&pets=0&parking=0&laundry=0&income-restricted=0&pnd=0&red=0&zso=0&days=any&ds=all&pmf=1&pf=1&zoom=3&rect=-134340820,16594081,-56469727,54952386&p=1&sort=globalrelevanceex&search=maplist&disp=1&listright=true&isMapSearch=true&zoom=3" 
response = requests.get(page) # request the json file 
json_response = json.loads(response.text) # parse the json file 
soup = Soup(json_response['list']['listHTML'], 'html.parser') 

スープには、探しているものがあります。 jsonを探索すると、多くの有益な情報が得られます。 すべてのURLのリストが

links = [i.attrs['href'] for i in soup.findAll("a",{"class":"hdp-link"})] 

すべてのURLで見つけることができる二回表示されます。それらが一意であることを望むなら、リストを修正するか、そうでなければ上記のクラスに"hdp-link routable"を探してください。 しかし、私はいつももっと好きです!

+0

私は答えを確認する必要があり、できるだけ早くそれを受け入れます。 – Arefe

+0

私は、スクリプトを実行した後、391kよりも少ないURLしか取得しません。私はあなたの答えを受け入れましたが、私はあなたがこの問題を解決することを願っています。 – Arefe

+0

コード内の 'json_response = json.loads(response.text)'行で 'ValueError:No JSONオブジェクトがデコードできません 'というメッセージが表示されます。しかし、これは私がチェックした有効なJSONです。 – Arefe

関連する問題