如何使用BeautifulSoup获取彼此之间的所有表格数据?

时间:2016-08-23 09:09:58

标签: python-3.x beautifulsoup

我想从彼此获取表格数据,但没有标记可供选择。

import urllib
import urllib.request
import requests
from bs4 import BeautifulSoup

source = ['http://lotto.auzonet.com/biglotto/list_' + str(i + 1) + '_all.html' for i in range(2003, 2016)]

for link in source:
visit_request = urllib.request.urlopen(link)
visit_response = visit_request.read()
visit_soup = BeautifulSoup(visit_response, 'html.parser', from_encoding='utf-8')

for ultag in visit_soup.find_all('td', {'class' : 'history_view'}):
    for table in ultag.find_all('table', {'class' : 'history_view_table'}):  
#table資料 ......

这就是我想要的enter image description here

1 个答案:

答案 0 :(得分:0)

你想要的是 history_view_table 中第二个tr里面的文字, select_one('table.history_view_table tr:nth-​​of-type(2)')会抓住第二个 tr ,调用 .find_all(text = True),它将获取所有文本,我们使用过滤新行等等。如果s.strip( )

data =  [s.strip() for s in visit_soup.select_one('table.history_view_table tr:nth-of-type(2)').find_all(text=True) if s.strip()]

那应该给你你想要的东西:

In [1]: import urllib.request

In [2]: from bs4 import BeautifulSoup

In [3]: visit_request = urllib.request.urlopen("http://lotto.auzonet.com/biglotto/list_2004_all.html")

In [4]: visit_response = visit_request.read()

In [5]: visit_soup = BeautifulSoup(visit_response, 'html.parser', from_encoding='utf-8')

In [6]: [s.strip() for s in visit_soup.select_one('table.history_view_table tr:nth-of-type(2)').find_all(text=True)
   ...:        if s.strip()]
Out[6]: 
['093104',
 '2004-12-30',
 '(星期四)',
 '落球順序:',
 '03',
 '18',
 '33',
 '34',
 '43',
 '49',
 '大小順序:',
 '03',
 '18',
 '33',
 '34',
 '43',
 '49',
 '02',
 '$282,609,200']

包括'$ 282,609,200'你没有在你的图片中突出显示但是它在下一张桌子之前,所以我认为这是一个疏忽。