提取美丽汤中的HTML表,获取重复元素

时间:2018-09-07 02:09:24

标签: python html python-3.x beautifulsoup

第二次尝试抓取Web,并遇到一个奇怪的错误。

我要得到的最终结果是将表剪贴起来,并将每一行放入一个SQL表中,但这具有90年代样式的嵌套表,无除法和无类。我已经读过有关使用结构的知识,但是我不知道该怎么做。我很好奇我是否可以从某行开始作为“结构”,但这也有局限性。

当前的挑战是该代码在移至下一行之前会拾取重复的元素并忽略其他元素。

import bs4
import urllib
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
my_url = 'http://www.texasregionalradio.com/top100.asp'
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")
table_soup = page_soup

# Limit the amount of HTML grabbed by Soup
#table_soup = page_soup.findAll("table", {"class":"sample"})

# Trying to grab cells from each row. Randomly chose [8:10] but I      don't know what they are selecting or why.

for row in table_soup.findAll("tr")[8:10]:
    for cell in row.findAll("td"):
        print(cell.text)

结果:

12  
2    
1     

PUT MY MONEY ON THAT / Independent   (1) Weeks at #1  
Curtis Grimes
PUT MY MONEY ON THAT / Independent   (1) Weeks at #1  
Curtis Grimes
PUT MY MONEY ON THAT / Independent   (1) Weeks at #1  
Curtis Grimes 

此外,我刚刚了解到.text可以格式化unicode,因此我不会得到奇怪的字符串,对此我感到非常高兴,也没有任何人与谁在乎它。那就是你。谢谢你的帮助。 :)

Q1:如何用这种混乱方式最好地隔离桌子? 问题2:为什么缺少元素? 问题3:重复哪些元素?

修改

通过将解析器切换为“ html5lib”可以改善某些结果:

12  
2    
1     


PUT MY MONEY ON THAT / Independent   (1) Weeks at #1  
Curtis Grimes
PUT MY MONEY ON THAT / Independent   (1) Weeks at #1  
Curtis Grimes
2192 
1967 
+225 
88%   
1   
PUT MY MONEY ON THAT / Independent   (1) Weeks at #1  
Curtis Grimes

1 个答案:

答案 0 :(得分:0)

该页面以表内表的形式显示您要查找的项目,如下所示:

<table>
    <tr>
        <td>
            <table>
                <tr>
                    <td>DESIRED TEXT HERE</td>

所需的<td>元素是外部表<tr>和内部表<tr>的子代(或孙代),因此您的搜索将找到相同的<td>元素多次。