【问题标题】:scrape book body text from project gutenberg de从古腾堡德项目中刮取书籍正文
【发布时间】:2021-04-30 02:10:40
【问题描述】:

我是 python 新手,我正在寻找一种方法来提取现有的开源书籍,这些书籍可以在 gutenberg-de 上找到,例如 this one 我需要使用它们进行进一步的分析和文本挖掘。

我尝试了这段代码,在教程中找到,它提取元数据,但它给我的不是正文内容,而是我需要从中刮取文本的“页面”列表。

import requests
from bs4 import BeautifulSoup

# Make a request
page = requests.get(
    "https://www.projekt-gutenberg.org/keller/heinrich/")
soup = BeautifulSoup(page.content, 'html.parser')

# Extract title of page
page_title = soup.title

# Extract body of page
page_body = soup.body

# Extract head of page
page_head = soup.head

# print the result
print(page_title, page_head)

我想我可以用它作为第二步来提取它吗?不过,我不确定如何。

理想情况下,我希望以表格方式存储它们,并能够将它们保存为 csv,保留元数据作者、标题、年份和章节。有什么想法吗?

【问题讨论】:

  • 不用说无所不在的事实,没有免费的午餐!。到目前为止,您尝试了哪些方法,哪些有效,哪些无效?
  • 谢谢,当然。我认为在这种情况下它不会有任何帮助,但是现在,我已经更新了问题:)

标签: python web-scraping beautifulsoup project-gutenberg


【解决方案1】:

会发生什么?

首先你会得到一个页面列表,因为你没有请求正确的url它到:

page = requests.get('https://www.projekt-gutenberg.org/keller/heinrich/hein101.html')

建议如果您循环所有urls 将内容存储在dictslist 中并将其推送到csvpandas 或...

示例

import requests
from bs4 import BeautifulSoup

data = []

# Make a request
page = requests.get('https://www.projekt-gutenberg.org/keller/heinrich/hein101.html')
soup = BeautifulSoup(page.content, 'html.parser')

data.append({
    'title': soup.title,
    'chapter': soup.h2.get_text(),
    'text': ' '.join([p.get_text(strip=True) for p in soup.select('body p')[2:]])
    }
)

data

【讨论】:

  • 您好,感谢您的建议!我试过你的代码,但它只提取一页,而不是整本书,我不太明白你所说的“循环所有 url”是什么意思。您是否建议我手动列出每个页面的所有网址?那岂不是消灭了抓取的范围?
  • 没错,如果你在循环中使用它,它会提取一页,你会得到所有的提取物。不,我不建议手动制作,但 SO 不是免费的编码服务,您的问题需要改进,因为不清楚您到底想要什么。所以我的建议只是难题的一部分:)
  • 对不起,我认为它已经足够清楚了!所以我需要提取一整本书(然后是更多的书)。我正在尝试使用上面的代码(和你的),但此时我没有管理,所以我正在寻找关于如何做到这一点的建议。 Stack Overflow 可能不是“免费编码服务”,但我总能找到愿意提供帮助的人! (包括你):) 所以现在的问题是:如果不手动,我如何循环这些 ursl?
  • 会推荐,接受该答案并关闭这些问题 - 关注循环网址,打开一个新的改进的网址并提及我。
猜你喜欢
  • 2011-04-02
  • 2020-09-05
  • 1970-01-01
  • 2019-02-16
  • 2021-08-24
  • 2019-09-20
  • 2023-01-19
  • 2022-12-15
  • 2019-07-16
相关资源
最近更新 更多