2017-01-27 204 views
0

我想從這個鏈接用美麗的湯

http://bet.hkjc.com/racing/pages/odds_wp.aspx?date=30-01-2017&venue=ST&raceno=2&lang=en

這裏湊表數據獲取特定的div元素的子元素是我的代碼

from lxml import html 
import webbrowser 
import re 
import xlwt 
import requests 
import bs4 

content = requests.get("http://bet.hkjc.com/racing/pages/odds_wp.aspx?date=30-01-2017&venue=ST&raceno=1&lang=en").text # Get page content 
soup = bs4.BeautifulSoup(content, 'lxml') # Parse page content 

table = soup.find('div', {'id': 'detailWPTable'}) # Locate that table tag 

rows = table.find_all('tr') # Find all row tags in that table 

for row in rows: 
    columns = row.find_all('td') # Find all data tags in each column 
    print ('\n') 
    for column in columns: 
     print (column.text.strip(),end=' ') # Output data in each column 

它不給予任何輸出。請幫忙 !通過的javascrip產生

回答

0

enter image description here

表和象圖爲requests將只返回的HTML代碼。

使用selemium

+0

WHIS這是正確的,我不知道爲什麼你已經包含了圖片,是嗎? – Rishav

+0

但是,當我使用print(table)打印數據時,它返回div元素,這意味着我們已經到達這個div表。現在我們只需要獲取這個div元素的表格子元素。我們應該怎麼做 ? –

+0

@Ardour Technologies在您的瀏覽器中禁用JS並查看頁面源代碼,該代碼將由'requests'返回。 –

0

我只是想提一提你正在使用的ID是包裝DIV,而不是子表元素。

也許你可以嘗試這樣的:

wrapper = soup.find('div', {'id': 'detailWPTable'}) 
table_body = wrapper.table.tbody 
rows = table_body.find_all('tr') 

但考慮這件事,在TR元素也包裝DIV的後代,所以find_all還是應該找到它們%]

更新:加入TBODY

更新:抱歉,我不能評論:)。你確定你有正確的文件嗎?你檢查過標籤實際存在的全部湯嗎?

而且我想所有這些線可以寫成:

rows = soup.find('div', {'id': 'detailWPTable'}).find('tbody').find_all('tr') 

更新:是包裝DIV是空的。所以看起來你不會像其他人說的那樣得到javascript產生的東西。也許你應該按照他的建議嘗試Selenium?可能也是PhantomJS。

+0

是的,但是你能告訴如何達到這個表格元素,因爲它沒有任何它自己的ID? –

+0

仍然無法正常工作。給出這個錯誤rows = table_body.find_all('tr')#查找該表中的所有行標記 AttributeError:'NoneType'對象沒有屬性'find_all' –

+0

仍然給出同樣的錯誤:( –

0

我看你的代碼的最後一行:

print (column.text.strip(),end=' ') # Output data in each column 

你肯定應該閱讀column.text。也許你可以試試column.stringscolumn.get_text()。或者column.stripped_strings甚至

+0

不,這實際上是正確的。爲這個網站的其他鏈接寫了這一行,並提供了期望的輸出。這裏的問題是,它沒有給出任何輸出以及我上面發佈的錯誤。 –

0

您可以dryscrape嘗試像這樣:

import dryscrape 
from bs4 import BeautifulSoup as BS 
import re 
import xlwt 

ses=dryscrape.Session() 
ses.visit("http://bet.hkjc.com/racing/pages/odds_wp.aspx?date=30-01-2017&venue=ST&raceno=1&lang=en") 
soup = BS(ses.body(), 'lxml') # Parse page content 

table = soup.find('div', {'id': 'detailWPTable'}) # Locate that table tag 

rows = table.find_all('tr') # Find all row tags in that table 

for row in rows: 
    columns = row.find_all('td') # Find all data tags in each column 
    print ('\n') 
    for column in columns: 
     print (column.text.strip())