2017-01-30 10 views
1

私はこのwebpageにコミットされたすべての犯罪を掻き回そうとしています。スクラップしたい各ページは、フォーマット「http://www.mylocalcrime.com/#」+郵便番号です。しかし、私がソースをpythonまたはchrome経由で見ると、私は逮捕者を列挙したデータは得られません。私は、犯罪の種類ごとの画像とその犯罪のラベルを含む一般的なWebページを取得します。たとえば、ソースには次のようなメッセージが表示されます(ソースを参照すると表示されます)。li < ...>破壊行為/ li>しかし、破壊行為は犯罪ではありませんが、これは単に破壊行為の内容を含む一般的な破壊行為のシンボルです。Xpathを使ってPythonでスクラップする問題

私は美しいスープを使用してみましたが、私のコードは基本的には次のとおりです。

import csv 
from bs4 import BeautifulSoup 
from lxml import html 
import requests 

csvloc = '.../.../filelocation.csv' 

ziplist = [1001] 
listofcrimes = [] 

#with open(csvloc,'r') as csvfile: 
# ziplist = list(csv.reader(csvfile)) 

for each in ziplist: 
    zipcode = str(each).zfill(5) 
    page = requests.get('http://www.mylocalcrime.com/#'+zipcode) 
    tree = html.fromstring(page.content) 

この要求は、一般的なページのHTMLファイルを返します。デスクトップスクレイパーを使用すると、結果をスクラップし、Xpath:// tr [50]/td([]は0から50まで)を提供するので、これを行う方法が必要です。よくXpathをよく理解していないけど、私が読んだソースファイルにはtrはありません。ヘルプをいただければ幸いです。

答えて

1

ブラウザでJavaScriptを無効にしてページを再度読み込んでください。空のページが表示されます。

ページのすべてのデータは、JavaScriptとAJAXによって追加されています。

lxmlおよびBSはJavaScriptを実行しないため、このデータを見つけることができません。

Selenium(または同様のツール)を使用して、ページを読み込んでJavaScriptを実行するブラウザを制御し、すべてのデータを含むHTMLを取得できます。

またはChrome/FirefoxでDevToolsを使用して、このデータを読むためにJavaScriptがどのURLを使用したかを確認してから、requestsを使用してこのURLからデータを読み取ることができます。 JavaScriptはデータを検索するのが簡単なJSON形式のデータを読み込みます。


EDIT:それはデータを取得するAPI http://api.spotcrime.comを使用しています。

おそらくサーバーhttp://spotcrime.comにアカウントがあり、データを取得するにはprivate keyが必要です。

JSONなどのデータを与えるhttp://www.mylocalcrime.comから実施例へのリンク:

http://api.spotcrime.com/crimes.json?lat=0&lon=0&radius=0.04&key=privatekeyforspotcrimepublicusers-commercialuse-877.410.1607


import requests 

url = 'http://api.spotcrime.com/crimes.json?lat=0&lon=0&radius=0.04&key=privatekeyforspotcrimepublicusers-commercialuse-877.410.1607' 

r = requests.get(url) 

data = r.json() 

crimes = data['crimes'] 

for x in crimes: 
    print(x['type'], x['date']) 

結果:

Arrest 01/26/17 03:38 PM 
Arrest 01/21/17 09:30 PM 
Arrest 01/20/17 05:09 PM 
Other 01/16/17 07:50 PM 
Arrest 01/16/17 11:14 AM 
Assault 01/15/17 07:59 AM 
Arrest 01/12/17 02:27 PM 
Assault 01/09/17 10:45 PM 
Theft 01/09/17 12:33 PM 
関連する問題