我是HTML和网络抓取的初学者,我正在尝试使用Python BeautifulSoup获取以下显示的数据。
[
Theft06/24/15 08:47 PM2000 BLOCK OF S COLLEGE AV
Vandalism06/24/15 07:32 PM3600 BLOCK OF WELLBORN RD
Theft06/24/15 07:30 PM800 BLOCK OF RIO GRANDE LN
Theft06/24/15 06:40 PM1800 BLOCK OF FINFEATHER RD
]
但是当我解析网站http://spotcrime.com/#77801
时,我无法在解析后的网址中看到div,因此无法获取数据。
我使用的代码是:
html=urllib2.urlopen('http://spotcrime.com/#77801')
soup = BeautifulSoup(html.read())
print soup
答案 0 :(得分:1)
您无法找到div,因为它是由javascript动态加载和插入的。但是,在这种情况下你可以做的是复制获取所有这些犯罪数据的ajax请求。
看起来他们的内部api不需要任何形式的身份验证,因此您可以继续发送以下api请求:
GET api.spotcrime.com/crimes.json?lat=30.639155&lon=-96.3647937&radius=0.02&key=spotcrime-private-api-key
作为奖励,您也不需要抓取网站,因为所有内容都作为JSON对象整齐地返回。
答案 1 :(得分:0)
而不是主要犯罪容器,只有urlopen
收到:
<div id="table_container" class="list-group crime-list" style="margin-top: -30px;">
<h3>Loading Crime Data...</h3>
<p>City and county crime map showing crime incident data down to neighborhood crime</p>
</div>
这是因为主容器的构建是借助对http://api.spotcrime.com/crimes.json
端点的额外API调用以及在浏览器中执行的javascript逻辑。
您可以做的是使用requests
在代码中模拟该API调用。工作示例:
import requests
url = "http://spotcrime.com/#77801"
crimes_url = "http://api.spotcrime.com/crimes.json"
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36'}
with requests.Session() as session:
session.headers = headers
session.get(url)
data = {
"lat": "30.6423514",
"lon": "-96.3704778",
"radius": "0.02",
"key": "spotcrime-private-api-key",
"_": "1435453242689"
}
response = session.get(crimes_url, data=data)
response = response.json()
for item in response["crimes"]:
print item
它打印与犯罪表中每行对应的词典:
{u'cdid': 64482204, u'lon': -96.3661035, u'lat': 30.6507387, u'link': u'http://spotcrime.com/crime/64482204-6737a0085bd9aff31548993910efa35a', u'address': u'2000 BLOCK OF S COLLEGE AV', u'date': u'06/24/15 08:47 PM', u'type': u'Theft'}
{u'cdid': 64482189, u'lon': -96.3594859, u'lat': 30.6299681, u'link': u'http://spotcrime.com/crime/64482189-345f4eca1c977f43e97ea4981f73d4de', u'address': u'3600 BLOCK OF WELLBORN RD', u'date': u'06/24/15 07:32 PM', u'type': u'Vandalism'}
...
{u'cdid': 64370976, u'lon': -96.361556, u'lat': 30.631685, u'link': u'http://spotcrime.com/crime/64370976-dc6e6dbb29fc7376c2b82356c45d281d', u'address': u'3600 BLOCK OF WELLBORN RD #802', u'date': u'06/18/15 12:37 PM', u'type': u'Arrest'}
{u'cdid': 64371003, u'lon': -96.3539954, u'lat': 30.6434707, u'link': u'http://spotcrime.com/crime/64371003-d9934d9b9d83c1867871701874c45523', u'address': u'2900 BLOCK OF S TEXAS AVENUE', u'date': u'06/18/15 09:56 AM', u'type': u'Vandalism'}