【问题标题】:Python and beautifulsoup - Scrape TextPython 和 beautifulsoup - 抓取文本
【发布时间】:2016-12-20 00:30:59
【问题描述】:
import requests
from bs4 import BeautifulSoup

url = 'https://www.brightscope.com/401k-rating/240370/Abengoa-Bioenergy-Company-Llc/244317/Abengoa-Bioenergy-Us-401K-Savings-Plan/'
thepage = requests.get(url)
urlsoup = BeautifulSoup(thepage.text, "html.parser")

plandata = urlsoup.find(class_="plans-section").text

print(plandata)

我试图只抓取评级编号的类别,但是当我使用此代码时,我什么也得不到:(。

  1. 如何只刮取等级编号的类别?
  2. 如何抓取多个类(这是最重要的部分)并将它们放入一个可读的列表中?

我的想法是循环抓取每个页面并将它们附加到带有新行的 .csv 文件中。

下面的例子;

Rating #1, Company Name1, etc, etc, etc

Rating #2, Company Name2, etc, etc, etc

我只是无法克服弄清楚这一点的困难。感谢您的帮助!

编辑 - “计划部分”类包含我想要的数据,但它似乎被分解为它下面的两个 div 标签。我想抓取“数据文本高于平均水平”类中的数据。问题是每个页面似乎只有相同的“数据文本”以及每个部分/页面更改后的内容。我有哪些选择?

【问题讨论】:

  • 您提供的网址不包含任何 class='data-text above-average'
  • 你是对的。我刚刚更新了 url,它的类“数据文本高于平均水平”,但我真的想抓取任何具有“数据文本 *”的类,我添加了星号来替换“数据文本”后面的任何文本。

标签: python web-scraping beautifulsoup python-requests


【解决方案1】:
import requests
from bs4 import BeautifulSoup


url = 'https://www.brightscope.com/401k-rating/141759/Aj-Kirkwood-Associates-Inc/143902/Aj-Kirkwood-Associates-Inc-401K-Profit-Sharing-Plan/'
thepage = requests.get(url)
urlsoup = BeautifulSoup(thepage.text, "html.parser")

rate = urlsoup.find(class_='rating-number').text
name = urlsoup.find(class_="name").text
print(rate, name)

出来:

59 A.J. Kirkwood & Associates, Inc.

使用re过滤器匹配所有包含特定文本的类:

If you pass in a regular expression object, Beautiful Soup will filter against that regular expression using its search() method.

在你的情况下:

import re
soup.find_all(class_=re.compile(r'data-text.+'))

【讨论】:

  • '从 bs4 导入请求 import BeautifulSoup url = 'brightscope.com/401k-rating/141759/Aj-Kirkwood-Associates-Inc/…' thepage = requests.get(url) urlsoup = BeautifulSoup(thepage.text, "html.parser") plandata = urlsoup.find( class_="plans-section").text print(plandata)'
  • 我正在尝试从该站点抓取数据,这些数据将在每个页面之间发生变化。上面的code 应该表明这一点。我想要的数据在“设计”下
  • 请更新问题,我会更新我的答案。
  • 刚刚更新。希望这能解释我想要抓取的内容。
  • 我不断收到一个空白列表[]我做得对吗?
【解决方案2】:

您到底想从页面中获得什么?如果您希望按类获取 div,这应该会有所帮助。

urlsoup.findAll("div", { "class" :"rating-number"})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-11
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 2018-01-09
    • 2016-06-19
    • 2018-04-06
    相关资源
    最近更新 更多