我是编程和python的新手。但我想在我的python脚本中解析HTML。
这是网页: http://stock.finance.sina.com.cn/hkstock/finance/00759.html
问题1 :
此页面是关于特定分享的财务信息。这四个表是关于:
我想提取表3和表3中的信息。这是我的代码:
import urllib
from bs4 import BeautifulSoup
url = 'http://stock.finance.sina.com.cn/hkstock/finance/00759.html'
html = urllib.urlopen(url).read() #.read() mean read all into a string
soup = BeautifulSoup(html, "lxml")
table = soup.find("table", { "class" : "tab05" })
for row in table.findAll("tr"):
print row.findAll("td")
但是这段代码只能得到第一个表信息。如何更改代码以获取第三个和第四个表信息?我发现那4个表不包含唯一的id或classname,我不知道如何找到它们....
问题2:
这也是简化中文网页,如何保持原文输出?
问题3:
在每张桌子的右上角,有一个下拉菜单,用于选择适当的时间段,即:"全部" ,"全部年" ,"半年" ,"第一季度" 和"第三季度" 。 urllib
是否可以更改此下拉菜单?
非常感谢。
答案 0 :(得分:1)
根据该网站,所有四个表都有类名" tab05"。
因此,您只需在.find
处将.findAll
方法更改为soup
,即可访问所有四个表。
import urllib
from bs4 import BeautifulSoup
url = 'http://stock.finance.sina.com.cn/hkstock/finance/00759.html'
html = urllib.urlopen(url).read()
soup = BeautifulSoup(html, "lxml")
tables = soup.findAll("table", { "class" : "tab05" })
print len(tables) #4
for table in tables:
for row in table.findAll("tr"):
for col in row.findAll("td"):
print col.getText()
对于简化中文的编码,print col.getText()
将在终端上获得正确的单词。如果您正在寻找将它们写入文件,则必须将字符串编码为gb2312。
f.write(col.getText().encode('gb2312'))
对于第3个问题,由于数据是用datatable.js编写的javascript函数呈现的,我认为不可能只用urllib来获取所有这些数据。更好地查看一些其他库以找到合适的用法。
答案 1 :(得分:0)
感谢您的回复。 我可能会误解你的意思。我重写代码如下:
QHeaderView::Stretch
" len(表格)"的结果是1.只能访问第一个表。 我发现如果我使用
tables = soup.findAll("table", { "class" : "tab05" })
print len(tables)
for row in tables[0].findAll("tr"):
for col in row.findAll("td"):
print col.getText()
我无法获得该表的所有信息。从这段代码得到的最后一个数字是" -45.7852",这只是该表的一半。