0

我对如何从特定站点的模板中获取数据感到困惑。该网站的网址是:http ://www.dnainfo.com/chicago/2013-chicago-murders/timeline?mon=1

, 月份从一月开始。在源代码中,模板显示为:id="homicide_template"。因此,我使用下面的代码来获取带有元素的特定模板:

import urllib2
import urllib
from bs4 import BeautifulSoup


url =  urllib2.urlopen('http://dnainfo.com/chicago/2013-chicago-murders/timeline?mon=1')
html = url.read()


soup = BeautifulSoup(html)
site_template = soup.find(id="homicide_template")

print site_template

我不确定如何从每个人的模板中获取年龄、种族、原因、邻居和时间的数据,并将它们保存到数据库或 .csv 文件中。我刚刚开始使用这些模块(urllib2 和 BeautifulSoup 4)。因此,感谢任何帮助/指导。谢谢。

4

1 回答 1

1

该网站是动态创建的,因此您不能只使用beautifulsoup 来解析它。您将需要像Selenium这样的东西来抓取呈现的网页。你可以这样做:

import selenium.webdriver as webdriver

url = 'http://dnainfo.com/chicago/2013-chicago-murders/timeline?mon=1'
driver = webdriver.Firefox()
driver.get(url)

soup = BeautifulSoup(driver.page_source)

做一些快速检查,看起来页面不会非常友好地解析。但是,我注意到每个条目<div class="well well-small">后面都有一个包含名称的右侧<div>(可能有一些更好的标签可以去掉,我没有注意到)。知道了这一点,您可以执行以下操作:

dudes = []
for dude in soup.find_all('div', 'well well-small'):
    dude_info = {}
    dude_info['Name'] = dude.parent['id']
    dude_info['Age'] = dude.find('div', 'age meta').contents[1]
    dude_info['Race'] = dude.find('div', 'race meta').contents[1]
    dude_info['Cause'] = dude.find('div', 'cause meta').contents[1]
    dude_info['Neighborhood'] = dude.find('div', 'neighborhood meta').contents[1]
    dude_info['Time'] = dude.find('div', 'time meta').contents[-1].next_element

    dudes.append(dude_info)
于 2013-08-23T19:40:18.017 回答