2017-01-27 57 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())