【问题标题】:python parse html from url with AttributeError: 'bytes' object has no attribute 'find_all'python从带有AttributeError的url解析html:'bytes'对象没有属性'find_all'
【发布时间】:2017-07-21 08:42:02
【问题描述】:

我想将 html 表从 ur 解析为 csv,但在代码中出现错误:page.find_all('tr'):

AttributeError: 'bytes' 对象没有属性 'find_all'

import urllib
import os
import csv

cwd = os.getcwd()
myFolder=cwd+"\In"
url="http://biznes.pap.pl/pl/reports/espi/all,0,0,0,1"
page = urllib.request.urlopen(url).read()

with open('listing.csv', 'w') as f:
   writer = csv.writer(f)
    for tr in page.find_all('tr'):
     tds = tr.find_all('td')
     row = [str(elem.text.encode('utf-8'))[1:] for elem in tds[:12]]
     writer.writerow(row)

print("Creating listing.csv file... ") 
print("Done... ") 

我认为这个网址中有其他内容。

感谢您的帮助

【问题讨论】:

    标签: python html csv parsing


    【解决方案1】:

    从 API 使用情况来看,您似乎打算初始化 BeautifulSoup 对象:

    from bs4 import BeautifulSoup
    
    # ...
    
    soup = BeautifulSoup(page, "html.parser")
    
    with open('listing.csv', 'w') as f:
        writer = csv.writer(f)
    
        for tr in soup.find_all('tr'):
            tds = tr.find_all('td')
            row = [str(elem.text.encode('utf-8'))[1:] for elem in tds[:12]]
    
            writer.writerow(row)
    

    【讨论】:

    • 谢谢,很遗憾我没有得到我想要的,因为文件包括:"'21:00','\r\n\t\t\t\t\t\t\r \n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t \t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t \t\t\t\t\t\t11/2017\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t \t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t \t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t','\n\nTermo2Power "
    • @JakubMedon 现在是一个不同的问题,可以通过剥离单元格值来解决:row = [str(elem.get_text(strip=True).encode('utf-8'))[1:] for elem in tds[:12]]
    【解决方案2】:

    您可能需要一个解析器,即BeautifulSoup:

    from bs4 import BeautifulSoup
    

    然后

    page = urllib.request.urlopen(url).read()
    

    来了

    soup = BeautifulSoup(page, 'html5lib')
    

    with open('listing.csv', 'w') as f:
        writer = csv.writer(f)
        for tr in soup.find_all('tr'):
        # --------^^^^---------------
    

    【讨论】:

    • 感谢您的快速回答。我收到错误“FeatureNotFound:找不到具有您请求的功能的树构建器:html5lib。您需要安装解析器库吗?”
    • 是的:pip install bs4 html5lib 在控制台上。
    • @JakubMedon:然后将其更改为soup = BeautifulSoup(page, "lxml") 并通过pip install lxml 安装lxml
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2014-10-23
    相关资源
    最近更新 更多