Python 在Beautiful Soup中提取HTML表,获得重复元素

Python 在Beautiful Soup中提取HTML表,获得重复元素,python,html,python-3.x,beautifulsoup,Python,Html,Python 3.x,Beautifulsoup,第二次尝试抓取网页时,遇到了一个奇怪的错误 我要做的最终结果是废弃该表并将每一行放入一个SQL表中,但这有90年代风格的嵌套表,没有分区,也没有类。我读过关于使用结构的书,但我不知道如何使用它。我一直很好奇我是否可以从某一行开始作为“结构”,但这也有局限性 当前的挑战是,这段代码在移动到下一行之前会拾取重复的元素并忽略其他元素 import bs4 import urllib from urllib.request import urlopen as uReq from bs4 import B

第二次尝试抓取网页时,遇到了一个奇怪的错误

我要做的最终结果是废弃该表并将每一行放入一个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 
另外,我刚刚了解到。文本可以格式化unicode,这样我就不会得到奇怪的字符串,我对此感到非常高兴,也没有任何人愿意与我分享。那就是你。谢谢你的帮助。:)

问题1:如何才能在这种混乱情况下最好地隔离桌子? 问题2:为什么缺少元素? 问题3:重复的元素是什么

编辑

通过将解析器切换到“html5lib”,某些结果得到了改进:


该页面将您要查找的项目显示为表中的表,如下所示:

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

此处为所需文本

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

谢谢。我应该更改什么,使其只找到一次?内部表具有
class=“internal”
,因此您可以将初始搜索限制为仅搜索该类的表。
<table>
    <tr>
        <td>
            <table>
                <tr>
                    <td>DESIRED TEXT HERE</td>