2014-03-06 27 views
1

我能夠刮我想要的數據,但因爲所有的div都在1個容器中,它是「內容體」,當我得到結果時,它們被作爲一個整體傾倒(你可以測試代碼,並看到)在所有的match_date,然後匹配然後tourny。Python BeautifulSoup類似divs在同一容器排序

import requests 
from bs4 import BeautifulSoup, Tag 
from lxml import html 
import requests 
import MySQLdb 
import urllib2 
import itertools 
import re 
import sys 
from datetime import date, timedelta as td, datetime 

urls =("http://www.esportsheaven.net/?page=match") 
hdr = {'User-Agent': 'Mozilla/5.0'} 
req = urllib2.Request(urls,headers=hdr) 
page = urllib2.urlopen(req) 
soup = BeautifulSoup(page) 

tournament=soup.findAll('div',{'class':['content-body']}) 
match_time = soup.find_all("div", style = "width:10%; float:left;") 
match = soup.find_all("div", style = "width:46%; float:left; margin-left:2%; margin-right:2%") 
tourny = soup.find_all("div", style = "width:40%; float:left; overflow:hidden;") 
for tag in tournament: 
    for tag in match_time: 
     print tag.text 
    for tag1 in match: 
     print tag1.text 
    for tag2 in tourny: 
     print tag2.text 
    print '===============' 

我曾嘗試一些其他的方法和循環,但沒有得到我想要什麼,我要的是結果:

match_date,比賽,圖爾尼

========= =========

和循環對所有這些我需要這把數據存儲在我的數據庫

回答

1

你解析代碼是相對於提取的元素正確的。但是,match_time,math和tourny的find方法應該是相對於變量tournament而不是soup。搜索與變量soup有關的任何內容將搜索整個文檔。 tournament只搜索您感興趣的內容div。

如果您查看網頁HTML,則只有一個divcontent-body類。所以,一個find_all調用是沒有意義的。所以,我們做的:

tournament = soup.find('div',{'class':['content-body']}) 

現在,我們發現所有的match_times,match_names和圖爾尼的

match_times = tournament.find_all("div", style = "width:10%; float:left;") 
match_names = tournament.find_all("div", style = "width:46%; float:left; margin-left:2%; margin-right:2%") 
tournys = tournament.find_all("div", style = "width:40%; float:left; overflow:hidden;") 

所有的三個數組的長度是相同的。所以我們將它們壓縮到訪問它們如下:

for element in zip(match_times, match_names, tournys): 
    print element[0].text, element[1].text, element[2].text 

這應該會給你你要找的。

+0

如果我們使用CSS選擇器,它可以變得更容易 – Umair