我对如何从特定网站从模板中获取数据感到困惑。该网站的网址是: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)。所以,任何帮助/方向都表示赞赏。感谢。
答案 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)