【问题标题】:Extracting data from Wikipedia to a txt file using Python使用 Python 将数据从 Wikipedia 提取到 txt 文件
【发布时间】:2020-09-02 08:46:58
【问题描述】:

我已经实现了以下代码来从维基百科页面中提取数据

import bs4
import sys
import requests

res = requests.get('https://en.wikipedia.org/wiki/Agriculture' )
res.raise_for_status()
wiki = bs4.BeautifulSoup(res.text,"html.parser")
for i in wiki.select('p'):
    print(i.getText())

此代码根据我的需要从页面中提取所有数据。但是,我想使用 Python 将其存储在文本文件中,但我无法做到。 文本文件的名称应为“Agriculture”(最好从 url 本身提取,以便可以在多个 wiki 页面上使用)。

【问题讨论】:

    标签: python list file web-scraping io


    【解决方案1】:

    试试这个:

    wiki_page = 'Agriculture'
    res = requests.get(f'https://en.wikipedia.org/wiki/{wiki_page}' )
    res.raise_for_status()
    wiki = bs4.BeautifulSoup(res.text,"html.parser")
    
    # open a file named as your wiki page in write mode
    with open(wiki_page+".txt", "w", encoding="utf-8") as f:
        for i in wiki.select('p'):
            # write each paragraph to the file
            f.write(i.getText())
    

    【讨论】:

    • 嗨。试过了。它给出了以下错误。 UnicodeEncodeError:“charmap”编解码器无法在位置 74 编码字符“\u016b”:字符映射到
    • 乐于助人:)
    • 嗨。尽管这很有效,但为什么不制作“.txt”文件?
    • @Sca 已更新,现在Agriculture.txt 将在您的工作目录中创建
    【解决方案2】:

    试试这个。这是一个参考。 Reading and writing files in Python

    import bs4
    import sys
    import requests
    
    res = requests.get('https://en.wikipedia.org/wiki/Agriculture')
    res.raise_for_status()
    wiki = bs4.BeautifulSoup(res.text,"html.parser")
    
    filename = wiki.title.text.split(' - Wikipedia')[0]
    with open(filename, 'w+') as f:
        for i in wiki.select('p'):
            f.write(i.getText())
    

    【讨论】:

      【解决方案3】:

      以下兼容所有python版本:

      import bs4
      import sys
      import requests
      url = "https://en.wikipedia.org/wiki/Agriculture"
      res = requests.get(url)
      res.raise_for_status()
      wiki = bs4.BeautifulSoup(res.text,"html.parser")
      file_to_write = open(url.split('/')[-1]+".txt", "a")  # append mode
      for i in wiki.select('p'):
          text_to_write = i.getText().encode('utf-8') 
          print(text_to_write)
          file_to_write.write(text_to_write)
      
      file_to_write.close()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-13
        相关资源
        最近更新 更多