Python数据刮取-提取表中标记'&书信电报;td>';存在

Python数据刮取-提取表中标记'&书信电报;td>';存在,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我一直在从事网页抓取工作,在从我正在抓取的网页上准备表格方面已经取得了相当大的进步 问题是我无法通过获取只包含数据的条目(以“”开头的行)。我的代码如下: url = requests.get('https://en.wikipedia.org/wiki/Demographics_of_Toronto_neighbourhoods') soup = BeautifulSoup(url.text,'lxml') print(soup.prettify()) table_classes = {'

我一直在从事网页抓取工作,在从我正在抓取的网页上准备表格方面已经取得了相当大的进步

问题是我无法通过获取只包含数据的条目(以“”开头的行)。我的代码如下:

url = requests.get('https://en.wikipedia.org/wiki/Demographics_of_Toronto_neighbourhoods')

soup = BeautifulSoup(url.text,'lxml')
print(soup.prettify())

table_classes = {'class':'sortable'}
raw_table = soup.findAll("table", table_classes)
print(raw_table)
放置嵌套代码行会导致错误“ResultSet对象没有“find_all”属性。您可能将项目列表视为单个项目。当您打算调用find()时,是否调用了find_all()”

td_tags=raw_table.find_all(“”)
td_标签
查看数据类型后,我尝试使用find(),但仍然导致相同的错误,因此我尝试使用以下代码在每行上循环:

原始表格中的行的
:
如果line.get_text().find(“”)>-1:
线
当我运行这个循环时,什么都没有发生。如果我把它放在“if”循环之外,那么它只返回表“Canada\u table\u raw”中的每一行


如何获取带有“”标记的条目,以便将结果放入pandas数据帧中?

您缺少一段让解析器运行的代码

url = requests.get(
    'https://en.wikipedia.org/wiki/Demographics_of_Toronto_neighbourhoods')

soup = BeautifulSoup(url.text, 'lxml')

table_classes = {'class': 'sortable'}
raw_table = soup.findAll("table", table_classes)
#print(raw_table)
for td in raw_table:
    print(td.findAll('td'))
正如错误代码所说。您正在返回一个ResultSet对象。因此,您需要迭代对象以获得所需的特定元素。在本例中,我们将返回ResultSet中的所有td元素,其输出如下:

[<td><b>Toronto <a class="mw-redirect" href="/wiki/Census_metropolitan_area" title="Census metropolitan area">CMA</a> Average</b>
</td>, <td>
</td>, <td>All
</td>, <td><b>5,113,149</b>
</td>, <td><b>5903.63</b>
</td>, <td><b>866</b>
</td>, <td><b>9.0</b>
</td>, <td><b>40,704</b>
</td>, <td><b>10.6</b>
</td>, <td><b>11.4</b>
</td>, <td>
</td>, <td>
</td>, <td>
</td>, <td><a href="/wiki
........
[Toronto Average
, 
全部的
, 5,113,149
, 5903.63
, 866
, 9.0
, 40,704
, 10.6
, 11.4
, 
, 
, 

,为什么不使用选择并抓取所有td元素

data = [item.text for item in soup.select('.sortable td')]

find_all()
返回一个列表。因此您需要访问该列表来执行漂亮的汤操作——通过索引访问
raw_table[0]
或迭代
raw_table
结果,然后执行
table.find_all('td')
所以我使用了code
td_标记=raw_table[0]。find_all('td'))
得到了一个非常大的列表,看起来像这样:[多伦多平均水平,,,全部…,7.9,意大利语(11.1%),11.1%意大利语,…]输出应该是这样的吗?这回答了您的问题吗?谢谢您的快速回复@Edeki,但是当我运行代码时,我收到以下错误消息:“NavigableString”对象没有属性“findAll”。我尝试使用“find”,它只返回第一个实例。我是否需要在某个地方使用数组?尝试否w我只是复制并粘贴了我所使用的内容。我想我在打算使用FindAll时输入了一个查找错误。如果它仍然不起作用,请告诉我。谢谢@Edeki!它现在起作用了。我只是通过将“td”更改为“tr”来调整它,现在所有的行都被“tr”绑定在不同的代码块中。谢谢您的帮助!
[<td><b>Toronto <a class="mw-redirect" href="/wiki/Census_metropolitan_area" title="Census metropolitan area">CMA</a> Average</b>
</td>, <td>
</td>, <td>All
</td>, <td><b>5,113,149</b>
</td>, <td><b>5903.63</b>
</td>, <td><b>866</b>
</td>, <td><b>9.0</b>
</td>, <td><b>40,704</b>
</td>, <td><b>10.6</b>
</td>, <td><b>11.4</b>
</td>, <td>
</td>, <td>
</td>, <td>
</td>, <td><a href="/wiki
........
data = [item.text for item in soup.select('.sortable td')]