Python 使用 Beautiful Soup 对特定内容进行 HTML 处理

2024-01-03

所以当我决定解析网站的内容时。例如,http://allrecipes.com/Recipe/Slow-Cooker-Pork-Chops-II/Detail.aspx http://allrecipes.com/Recipe/Slow-Cooker-Pork-Chops-II/Detail.aspx

我想将成分解析为文本文件。成分位于:

其中,每种成分都存储在

有人很好地使用正则表达式提供代码,但是当您从一个站点修改到另一个站点时,它会变得混乱。所以我想使用 Beautiful Soup,因为它有很多内置功能。但我对如何实际做到这一点感到困惑。

Code:

import re
import urllib2,sys
from BeautifulSoup import BeautifulSoup, NavigableString
html = urllib2.urlopen("http://allrecipes.com/Recipe/Slow-Cooker-Pork-Chops-II/Detail.aspx")
soup = BeautifulSoup(html)

try:

        ingrdiv = soup.find('div', attrs={'class': 'ingredients'})

except IOError: 
        print 'IO error'

你就是这样开始的吗?我想找到实际的 div 类,然后解析出 li 类中的所有成分。

任何帮助,将不胜感激!谢谢!


import urllib2
import BeautifulSoup

def main():
    url = "http://allrecipes.com/Recipe/Slow-Cooker-Pork-Chops-II/Detail.aspx"
    data = urllib2.urlopen(url).read()
    bs = BeautifulSoup.BeautifulSoup(data)

    ingreds = bs.find('div', {'class': 'ingredients'})
    ingreds = [s.getText().strip() for s in ingreds.findAll('li')]

    fname = 'PorkChopsRecipe.txt'
    with open(fname, 'w') as outf:
        outf.write('\n'.join(ingreds))

if __name__=="__main__":
    main()

结果是

1/4 cup olive oil
1 cup chicken broth
2 cloves garlic, minced
1 tablespoon paprika
1 tablespoon garlic powder
1 tablespoon poultry seasoning
1 teaspoon dried oregano
1 teaspoon dried basil
4 thick cut boneless pork chops
salt and pepper to taste

.


对@eyquem的后续回复:

from time import clock
import urllib
import re
import BeautifulSoup
import lxml.html

start = clock()
url = 'http://allrecipes.com/Recipe/Slow-Cooker-Pork-Chops-II/Detail.aspx'
data = urllib.urlopen(url).read()
print "Loading took", (clock()-start), "s"

# by regex
start = clock()
x = data.find('Ingredients</h3>')
patingr = re.compile('<li class="plaincharacterwrap">\r\n +(.+?)</li>\r\n')
res1 = '\n'.join(patingr.findall(data,x))
print "Regex parse took", (clock()-start), "s"

# by BeautifulSoup
start = clock()
bs = BeautifulSoup.BeautifulSoup(data)
ingreds = bs.find('div', {'class': 'ingredients'})
res2 = '\n'.join(s.getText().strip() for s in ingreds.findAll('li'))
print "BeautifulSoup parse took", (clock()-start), "s  - same =", (res2==res1)

# by lxml
start = clock()
lx = lxml.html.fromstring(data)
ingreds = lx.xpath('//div[@class="ingredients"]//li/text()')
res3 = '\n'.join(s.strip() for s in ingreds)
print "lxml parse took", (clock()-start), "s  - same =", (res3==res1)

gives

Loading took 1.09091222621 s
Regex parse took 0.000432703726233 s
BeautifulSoup parse took 0.28126133314 s  - same = True
lxml parse took 0.0100940499505 s  - same = True

正则表达式要快得多(除非它是错误的);但如果考虑加载页面并一起解析,BeautifulSoup 仍然只有 20% 的运行时间。如果您非常关心速度,我推荐使用 lxml。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 使用 Beautiful Soup 对特定内容进行 HTML 处理 的相关文章

  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 悬停此元素时隐藏元素后的伪元素

    我的菜单垂直放置在页面左侧和菜单之间 li 我有一个 after那是一个分隔符 我想要的是当我悬停元素本身 如果它是第一个元素 时隐藏 after 元素 或者当它是中间元素时隐藏上面和底部的元素 如果它是最后一个子元素 则隐藏 after前
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 类型错误:预期单个张量时的张量列表 - 将 const 与 tf.random_normal 一起使用时

    我有以下 TensorFlow 代码 tf constant tf random normal time step batch size 1 1 我正进入 状态TypeError List of Tensors when single Te
  • 如何创建适合屏幕宽度的等宽/高框? [复制]

    这个问题在这里已经有答案了 我正在尝试建立一个网站 其中有很多宽度和高度相等的框 例如 我有一个页面 其中并排有两个相同大小的框 简单的解决方案是将宽度和高度设置为 50vw 这在出现滚动条之前效果很好 我已经用谷歌搜索了几个小时 但无法理
  • 在 HTML 下拉列表中有一个滚动条

    我正在寻找一种在 HTML 的下拉列表中添加滚动条的方法 这样如果下拉列表包含的内容超过例如 5 项 将出现滚动条以查看其余项 这是因为我将被迫列出一些大清单 过去几个小时我一直在谷歌上搜索它 但没有运气 它需要适用于 IE8 FF 和 C
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 表格行未扩展到全宽

    我有一个表格 当我将表格的宽度设置为 100 并将表格行的宽度设置为 100 时 没有任何反应或宽度发生变化 Table Normal position relative display block margin 10px auto pad
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 通过 htaccess 将 PNG 解析为 PHP 仅适用于本地服务器,但不适用于网络服务器

    我用 PHP 创建了一个动态 PNG 图片 为了使用 PNG 扩展名 我创建了一个包含以下内容的 htaccess 文件 AddType application x httpd php png 在我的本地 XAMPP 服务器上 一切工作正常
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • CSS溢出文本显示在几行中,没有断字

    我有一些长文本显示在 div 中 该 div 具有固定的宽度和高度 我希望文本显示在几行上 作为 div 高度 并且句子单词不会中断 一行中的单词前缀和下一行中的继续 此外 我想在末尾添加省略号最后一句话 CSS white space n
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • 通过使用转换器来转换对象,绑定到任意 Dictionary<,>

    我正在尝试解决绑定到字典的困难 https stackoverflow com questions 13330938 binding a dictionary to a winrt listbox在 WinRT Xaml 中 也引用here
  • 如何更改嵌套字典中的值

    我需要更改嵌套字典中的值 考虑这本字典 stocks name stocks IBM 146 48 MSFT 44 11 CSCO 25 54 micro name micro age 1 我需要循环遍历所有键并更改所有值name keys
  • 为什么我丢失了会话变量?

    我使用 MVC 并使用 KnockoputJS 我从 2 个选择中选择值 在第一个选择中 我选择 IDCompany 在第二个选择中 我选择 IDSubsidiary 我将 Json 中的模型发送到控制器中的 JsonResult 然后创建
  • 为什么经典的 ASP 服务器端包含包含在注释中?

    为什么服务器端包含的语法是 将语义上有意义的内容放在注释中似乎很尴尬且具有误导性 事实上 当我第一次看到这种语法时 我认为它是一个已被 注释掉 的包含内容 设计语言使用这种语法而不是像这样的替代方案背后的原因是什么 我知道用简单的替换来解析
  • 从服务器发送文件到客户端(python)

    我目前正在编写一个服务器客户端应用程序 需要传输一些文件才能工作 我正在使用这个方法 client file to send raw input gt try f open sent files file to send rb except
  • 如何避免工具提示中出现阴影?

    我开发了一个 ToolTip 控件 并将其注册为 ToolTip 代码如下 protected override CreateParams CreateParams get CreateParams param base CreatePar
  • Rails - 警告:无法批量分配受保护的属性

    从这里继续 Rails 表单问题 https stackoverflow com questions 6058486 rails form problems 每次我尝试创建一个新的group membership我明白了 WARNING C
  • Rails db:种子错误“未定义方法‘finder_needs_type_condition?’对于 nil:NilClass"

    我在尝试填充 sqlite 数据库时遇到问题 关于特定错误 finder needs type condition 的信息不多 我可以找到 但我没有太多使用 Rails 的经验 甚至怀疑问题可能出在哪里 Model class Charac
  • 如何使用Android相机获取全分辨率和未压缩的图像数据?

    我想获得全分辨率 而不是压缩 图像数据 然后我可以进行一些图像处理 据我所知 android api takePicture shutter raw jpg 可以做一些事情 但是我需要的不是压缩的 JPEG 数据 而是未压缩的图像数据 而且
  • 有没有 StringUtils.isNumeric 的替代方案可以实现我的意思?

    StringUtils isNumeric 对于 返回 true 对于 7 8 返回 false 这当然是有记录的行为 但对我来说确实不是最方便的 还有其他东西 最好是在 commons lang 中 提供 isActuallyNumeri
  • 如何降低firebase实时数据库下载成本? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在firebase实时数据库中制作2个数据库是否有助于降低成本并增加每天360MB的每日下载限制 降低成本最简单的方法是减少下载 你可
  • 在 JasperReports 中进行比较 if else

    我想做一个比较 例如 if
  • Order by 不适用于 LINQ 中的 Concat()

    使用 VB net 和以下 LINQ 语句 我怀疑 排序依据 不适用于Concat 我想列出用户当前拥有的项目 然后按升序列出更多可用项目 因此 首先我从数据库中选择当前项目 然后按顺序选择下一个可用项目 LINQ 忽略 order by
  • 如何在 Mac 上将 localhost 绑定到 127.0.0.1? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的本地计算机上有一个正在运行的 Web 应用程序 要访问它 我可以使用localhost 8080 但是当我尝试使用http 127 0
  • MVC3中提交数据库数据后如何清除模型

    我正在数据库中提交一些数据 提交后我想显示同一页面 但我正在查看页面 文本框值不为空 ModelState Clear 我曾经用来清除文本框 但文本框值仍然保留 请建议我在mvc3中提交后清除模型 public ActionResult A
  • 重置 DBUnit 中的序列?

    我想在 Java DBUnit 中的每次测试后重置数据库 AND 序列 我已经看到这个问题 但没有我正在努力获得的代码解决方案 如何在DBUnit中使用Oracle序列号 https stackoverflow com questions
  • 在 ruby​​ 类中调用 Knife

    我想围绕刀创建一个很好的包装类 以允许程序以可读的方式运行刀命令 我目前正在尝试使用 Chef gem 中的 Knife rb 文件作为取得成功的指南 但是 我在关闭编辑器时遇到问题 如果我运行以下代码 require chef knife
  • 过滤数据集

    我有一个充满客户的数据集 我想知道是否有任何方法可以过滤数据集并仅获取我想要的信息 例如 要得到CostumerName and CostumerAddress对于有的客户CostumerID 1 是否可以 您可以使用DataTable S
  • Twitter Bootstrap - 如何根据 @media 定义的宽度更改 css 类

    这是我的第一个问题 但我只想说这个网站多年来帮助了我无数次 我想我已经到了有自己的问题要问的阶段了 抱歉 如果问题不清楚 我会尝试详细说明 我已经为我的一些元素分配了一个过渡 这样当它们悬停在上面时它们就会向上升起 即 example ho
  • Python 使用 Beautiful Soup 对特定内容进行 HTML 处理

    所以当我决定解析网站的内容时 例如 http allrecipes com Recipe Slow Cooker Pork Chops II Detail aspx http allrecipes com Recipe Slow Cooke