尝试使用urllib2和BeautifulSoup从网站中的模板中检索数据

时间:2013-08-23 15:47:11

标签: python beautifulsoup urllib2

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

,月份从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

我不确定如何从每个人的模板中获取Age,Race,Cause,Neighborhood和Time的数据,并将它们保存到数据库或.csv文件中。我刚刚开始使用这些模块(urllib2和BeautifulSoup 4)。所以,任何帮助/方向都表示赞赏。感谢。

1 个答案:

答案 0 :(得分: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)