【问题标题】:How to scrape a whole website using beautifulsoup如何使用 Beautifulsoup 抓取整个网站
【发布时间】:2018-01-29 13:52:11
【问题描述】:

我对编程和 OO 编程尤其陌生。尽管如此,我正在尝试编写一个非常简单的网络爬虫蜘蛛。这是我的第一种方法:

我需要从这个页面获取数据:http://europa.eu/youth/volunteering/evs-organisation_en

首先,我查看页面源代码以查找 HTML 元素? view-source:https://europa.eu/youth/volunteering/evs-organisation_en

注意:我需要获取此行正下方的数据:

EVS 认证组织搜索结果:6066

我为这份工作选择了漂亮的汤——因为它非常强大:

我使用 find_all:

soup.find_all('p')[0].get_text() # Searching for tags by class and id

注意:CSS 使用类和 ID 来确定将某些样式应用于哪些 HTML 元素。我们也可以在抓取时使用它们来指定我们想要抓取的特定元素。

查看课程:

                  <div class="col-md-4">
            <div class="vp ey_block block-is-flex">
  <div class="ey_inner_block">
    <h4 class="text-center"><a href="/youth/volunteering/organisation/935175449_en" target="_blank">&quot;People need people&quot; Zaporizhya oblast civic organisation of disabled families</a></h4>
            <p class="ey_info">
    <i class="fa fa-location-arrow fa-lg"></i>
    Zaporizhzhya, <strong>Ukraine</strong>
</p>    <p class="ey_info"><i class="fa fa-hand-o-right fa-lg"></i> Sending</p>
                  <p><strong>PIC no:</strong> 935175449</p>
        <div class="empty-block">
      <a href="/youth/volunteering/organisation/935175449_en" target="_blank" class="ey_btn btn btn-default pull-right">Read more</a>    </div>
  </div>

所以这导致:

# import libraries
import urllib2
from bs4 import BeautifulSoup
page = requests.get("https://europa.eu/youth/volunteering/evs-organisation_en")
soup = BeautifulSoup(page.content, 'html.parser')
soup

现在,我们可以使用 find_all 方法按类或 id 搜索项目。在下面的示例中,我们将搜索任何具有类 external-text

的 p 标签
<div class="col-md-4">

所以我们选择:

soup.find_all(class_="col-md-4")

现在我必须合并所有。

更新:我的方法:到目前为止:

我使用 BeautifulSoup4 从网页中提取了包含在多个 HTML 标记中的数据。我想将所有提取的数据存储在一个列表中。而且 - 更具体地说:我希望每个提取的数据都作为单独的列表元素,用逗号分隔(即 CSV 格式)。

从头开始:

这里我们有 HTML 内容结构:

 <div class="view-content">
            <div class="row is-flex"></span>
                 <div class="col-md-4"></span>
            <div class </span>
  <div class= >
    <h4 Data 1 </span>
          <div class= Data 2</span>
            <p class=
    <i class=
     <strong>Data 3 </span>
</p>    <p class= Data 4 </span>
          <p class= Data 5 </span>
                  <p><strong>Data 6</span>
        <div class=</span>
      <a href="Data 7</span>
  </div>
</div>

要提取的代码:

for data in elem.find_all('span', class_=""):

这应该给出一个输出:

data = [ele.text for ele in soup.find_all('span', {'class':'NormalTextrun'})]
print(data)

输出: ['数据1'、'数据2'、'数据3'等等]

问题:/我需要提取部分的帮助...

【问题讨论】:

  • 那么,问题是什么?您需要哪方面的帮助?
  • 您好,亲爱的 Keyur - 坦率地说:我是 Python /& BS 初学者,我只有一些教程 - 背景。如果你能在接下来的步骤中伸出援助之手,我必须完成和做。我需要一种方法。你能帮我帮忙吗 - 我可以继续... - 很高兴收到你的来信 - 马拉加
  • 你说now i have to combine all.。你能准确解释你想做什么吗?在您提供 MCVE 后,SO 上的人们会很乐意为您提供帮助。阅读-How to create a Minimal, Complete, and Verifiable example。另外,如果我忽略了某些内容而没有得到您的确切问题,我深表歉意。
  • 亲爱的 Keyur - 再次非常感谢。我添加了一些内容并尝试提供一个最小的完整且可验证的示例。换句话说:我试图收集我所拥有的一切,以便我们可以讨论这种方法。如果您可以仔细查看部分数据 - 使用 BS4 进行提取,我会非常高兴。 - 亲切的问候马拉加
  • 亲爱的马拉加 - 你必须听到 keyur - 我认为他是完全正确的。你得让我们看看你想解析的源代码

标签: python beautifulsoup


【解决方案1】:

试试这个

data = [ele.text for ele in soup.find_all(text = True) if ele.text.strip() != '']
print(data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-27
    • 2019-12-15
    • 2013-03-08
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多