【问题标题】:web scrape a .txt file using python [closed]网络使用python抓取一个.txt文件[关闭]
【发布时间】:2016-05-24 19:43:02
【问题描述】:

我希望从 sec.gov 网站上抓取大量文件,目前进展顺利。问题是旧文件是 .txt 格式,没有任何真正的 HTML 格式。有没有办法使用 Python 从这些文件中获取信息?

Here's a link to an example document

我有大约 30,000 个这样的人要做,而旧文档是我的老板真正想要的……我目前正在使用 BeautifulSoup4 来处理其他格式正确的刮擦。

提前致谢!

【问题讨论】:

  • 您想获取什么样的信息?
  • 如果它们不是 HTML 也不是网页抓取,只是普通解析。
  • 你需要添加一些预期的输出。
  • 为了解析文本文件,你可以使用纯 Python,作为字符串函数和正则表达式。我编写了一个小型库来帮助完成这项任务,您可以在其中定义要提取的内容作为模型定义。它适用于您拥有半结构化数据的情况。也许它可以帮助你:github.com/fgmacedo/raspador
  • 是的,Python 擅长文本处理。文档是否包含足够的逻辑信息以允许您提取所需的数据,这是我们无法从问题中判断出来的。

标签: python python-3.x web-scraping beautifulsoup


【解决方案1】:

如果你能得到文本文件,你应该只需要基本的文本文件解析。

对于您的目的,这样的事情应该没问题: http://www.pythonforbeginners.com/files/reading-and-writing-files-in-python

具体来说,要打开您在本地拥有的文件,您可以使用以下内容:

file = open("newfile.txt", "r")

第一个参数是你的文件名,第二个参数是你想要打开文件的模式(“r”代表读取)。然后,您可以使用各种方法,如 file.read()、file.readline() 或 file.readlines() 从文本文件中获取字符。

如果您想专门从文本文件中读取单词,请同时查看Reading a text file and splitting it into single words in python。那里的答案向您展示了如何遍历与您的 python 脚本位于同一目录中的文本文件中的所有单词。

with open('words.txt','r') as f:
    for line in f:
        for word in line.split():
           print(word)  

如果您没有本地下载文件但您有 URL,这也应该可以帮助您:In Python, given a URL to a text file, what is the simplest way to read the contents of the text file?

您正在寻找的该链接中的特定部分是:

import urllib2  # the lib that handles the url stuff

data = urllib2.urlopen(target_url) # it's a file like object and works just like a file

【讨论】:

  • 除了没有足够信息的问题,为什么要投反对票?这正是他要求做的……
  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • 很公平!感谢您提供信息。
  • 考虑到我提供的信息很少,我认为他的回答是可以接受的。我的问题是相当基本的,他给出了一个更基本的答案。不管什么原因,我忘记了,不管它在哪里,它仍然是一个文本文件。感谢您的建议,我今天会检查 urllib!
【解决方案2】:

在这个使用 urllib.request 获取文件和 lxml 解析的特定示例中:

import urllib.request
broken_xml = urllib.request.urlopen('https://www.sec.gov/Archives/edgar/data/20/000089322004000596/w93059exv31w1.txt').read().decode('utf-8')
from lxml import etree
from io import StringIO
tree = etree.parse(StringIO(broken_xml), parser = etree.XMLParser(encoding='utf-8', recover=True))
tree.xpath('//SEQUENCE/text()')
# ['7\n']
tree.xpath('//FILENAME/text()')
# ['w93059exv31w1.txt\n']

【讨论】:

    猜你喜欢
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多