【问题标题】:Beautiful soup not picking u certain tags美丽的汤没有选择你的某些标签
【发布时间】:2017-05-22 14:45:58
【问题描述】:

好的,我已经在这里阅读了很多关于使用美汤的答案。仍然没有运气在这里完成我需要做的事情是我的

soup = BeautifulSoup(open("/home/brendan/PycharmProjects/untitled2/newDeficency.html"),"html5lib")

for element in soup.find_all('input'):
    print(element['name'], element['value'])

因为现在这是一个更大程序的一部分,所以我只是缓存了一个我现在想抓取的页面类型的副本,这目前不返回任何内容,但以下代码返回文档中的所有超链接

for element in soup.find_all('a'):
    print(element['href'])

我不确定为什么这不能正常工作,因为我也尝试过使用

'li' , 'select' 'option' and 'form' 

尽管他们显然在源代码中,但没有成功是here is a link to source page

非常感谢,因为我已经把这 6 行代码弄乱了几个小时,完全迷失了

【问题讨论】:

  • 我尝试点击“源页面”的链接给了我:{"error":{"errors":[{"domain":"global","re​​ason":"lockedDomainExpired", "message":"锁定域过期"}],"code":401,"message":"锁定域过期"}}.
  • 澄清一下,您只想获取页面的所有input 元素的“名称”和“值”属性?
  • 对不起,我更新了源链接,第一次没有使用公共链接但是是的,我只是想获取“输入”的名称和值
  • 问题是一些 没有 'name' 而一些 没有 'href' 。你到底想刮什么?
  • 好的,可能是这种情况,但正如比尔·贝尔所展示的那样 [inputs = soup.find_all('input');len(inputs) ] 仍然应该返回一个除零以外的数字 .. 和 im试图抓取本质上是一个定制的 phpmyadin 面板

标签: python python-3.x web-scraping beautifulsoup


【解决方案1】:

这可能是你需要的。

HTML = '''\
<html>
<body>
<form>
    <input type='text' name='name' value='jones'></input>
    <input type='text' name='rank' value='private'></input>
    <input type='text' name='serial_number' value='B18567'></input>
</form>
</body>
</html>'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(HTML, 'lxml')
for element in soup.find_all('input'):
    print (element.attrs['name'], element.attrs['value'], element.attrs['type']) 

输出:

name jones text
rank private text
serial_number B18567 text

编辑:当您在浏览器中打开下载的文件时,您应该会在浏览器窗口中看到类似的内容。

现在,在 Windows 中按 Ctrl-A、Ctrl-C 并将剪贴板内容放入名为 temp.htm 的文件中。

【讨论】:

  • 嘿,谢谢,虽然这可行,但它似乎不适用于我需要的源文件。 find_all 函数没有返回任何内容
  • 我认为那是因为该代码已经受到了足够的折磨,以至于它不再具有任何 input 元素。这是一个确实 显示input 元素但没有任何元素的页面,如果你关注我的话。您仍然可以访问原始页面吗?
  • 我确实跟着你,是的,这是意大利面条的定义,但这就是它直接来自登录背后的服务器的方式,这就是为什么我发布源代码确实有 { } 但是我注意到没有 {} 但我从文档中印象深刻 html5lib 会处理这个问题吗?
  • 是的。 :) 帮助你,就是这样。获取 HTML 的一种简单方法是将下载的内容加载到浏览器中,然后将浏览器窗口中的内容复制粘贴到文本文件中(我称之为 temp.htm)并运行类似以下内容。 soup = BeautifulSoup(open('temp.htm').read(), 'lxml');inputs = soup.find_all('input');len(inputs) 我的结果是 37。
  • 真的吗?也许它与我的设置有关?因为我仍然得到 0 结果,尽管有至少 3 或 4 个,但我得到 1 的结果 'table' ......我正在使用 beutifulsoup4 和 python 3.4.3
猜你喜欢
  • 2018-07-18
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
相关资源
最近更新 更多