我正在尝试从此链接中删除表格数据
http://bet.hkjc.com/racing/pages/odds_wp.aspx?date=30-01-2017&venue=ST&raceno=2&lang=en
这是我的代码
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
它没有提供任何输出。请帮忙!
答案 0 :(得分:0)
答案 1 :(得分: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。
答案 2 :(得分:0)
我正在查看代码的最后一行:
print (column.text.strip(),end=' ') # Output data in each column
您确定应该阅读column.text
。也许您可以尝试column.strings
或column.get_text()
。或者column.stripped_strings
甚至
答案 3 :(得分: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())