繁体   English   中英

Python 错误:'NoneType' object 没有使用 Beautiful Soup 的属性 'find_all'

[英]Python Error: 'NoneType' object has no attribute 'find_all' using Beautiful Soup

我在尝试运行一些网页抓取代码时遇到问题。 从一系列链接中抓取信息,如下所示:

http://www2.congreso.gob.pe/Sicr/TraDocEstProc/CLProLey2006.nsf/ec97fee42a2412d5052578bb001539ee/89045fe8ae896e2e0525751c005544cd?OpenDocument

我正在尝试从表中抓取某些元素,但收到以下错误:

Python Error: 'NoneType' object has no attribute 'find_all'

我知道这与它实际上并没有找到表有关,因为当我运行以下简化代码时:

from bs4 import BeautifulSoup
import requests
import pandas as pd
import csv
import time

url = 'http://www2.congreso.gob.pe/Sicr/TraDocEstProc/CLProLey2006.nsf/ec97fee42a2412d5052578bb001539ee/89045fe8ae896e2e0525751c005544cd?OpenDocument'

page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')


table = soup.find('table', {'bordercolor' : '#6583A0'})
print(table)

它为打印的表格返回“无”,这意味着代码无法抓取表格的任何特征。 我一直在为类似的页面运行类似的代码,并且我能够很好地找到表格,所以我不确定为什么这不起作用? 我是网络抓取的新手,但我会很感激任何帮助!

所以汤没有正确解析网站内容,因为一个标签不正确,破坏了结构。 您必须在解析之前修复它:

url = 'http://www2.congreso.gob.pe/Sicr/TraDocEstProc/CLProLey2006.nsf/ec97fee42a2412d5052578bb001539ee/89045fe8ae896e2e0525751c005544cd?OpenDocument'

page = requests.get(url)
soup = BeautifulSoup(page.text.replace("</script\n", "</script>"), 'html.parser')

table = soup.find('table', {'bordercolor' : '#6583A0'})
print(table)

我认为 html 包含一些缺陷,导致 html 解析器无法正确解析您的soup ,您可以通过打印page.text来验证您会发现某些部分已被打印

然而,lxml 解析器成功地解析了它的缺陷,因为lxml在格式错误的 html 文档上效果更好:

rom bs4 import BeautifulSoup
import requests
import pandas as pd
import csv
import time

url = 'http://www2.congreso.gob.pe/Sicr/TraDocEstProc/CLProLey2006.nsf/ec97fee42a2412d5052578bb001539ee/89045fe8ae896e2e0525751c005544cd?OpenDocument'

page = requests.get(url)
soup = BeautifulSoup(page.text, 'lxml')


table = soup.find('table', {'bordercolor' : '#6583A0'})
print(table)

应该正确捕获表格标签


import pandas as pd

df = pd.read_html(
    "http://www2.congreso.gob.pe/Sicr/TraDocEstProc/CLProLey2006.nsf/ec97fee42a2412d5052578bb001539ee/89045fe8ae896e2e0525751c005544cd?OpenDocument")[0]

print(df)
df.to_csv("Data.csv", index=False, header=None)

Output: 在线查看

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM