【问题标题】:How to extract anchor elements nested in multiple division elements如何提取嵌套在多个划分元素中的锚元素
【发布时间】:2019-10-12 18:57:24
【问题描述】:

我正在尝试从我漂亮的汤对象中提取锚元素,其中每个对象都嵌套在多个部门中。分区重复并用一些脚本分隔

我试图利用锚元素中的公共类属性来提取它们

我得到的代码:

<div id='container'>
<div class='nested'>
<a href='some url' class='link'>
</a>
</div>
</div>

#some scripts ....

<div id='container'>
<div class='nested'>
<a href='some url' class='link'>
</a>
</div>
</div>

我尝试了什么:

import requests, bs4, webbrowser

webpage=requests.get('some url')
webpage.raise_for_status()
soup=bs4.BeautifulSoup(webpage.text)
links=soup.select('.link a')

for i in range(0,5):
  webrowser.open('intial site url'+links[i].get('href'))
print(links)

没有打开任何标签。打印链接给出了一个空白列表

【问题讨论】:

  • 我是这个网站的新手,我希望你喜欢这种格式;)。一段时间以来一直在研究格式技巧 XD

标签: python html web-scraping beautifulsoup css-selectors


【解决方案1】:

替换您的行代码:

links=soup.select('.link a')

  links=soup.find_all('a',{'class':'link'})
  print(links)

O/P:

[<a class="link" href="some url">
</a>, <a class="link" href="some url">
</a>]

获取href表单a标签:

for link in links:
  href = link['href']
  print(href)

【讨论】:

  • 但它们嵌套在部门中,这样行吗?
  • @JadAH find_all() 具有link 类的a 标签的方法返回列表
  • 我使用了 print(links),它确实为我提供了这些锚元素的完整列表,但我的网络浏览器功能似乎无法打开它们
  • 没错,我从 print(links) 得到了这样的输出,但我的最后一行代码应该从这些锚元素中获取 href 并打开相应的选项卡,但我的 webbrowser.open 函数是打开我输入的初始网址的标签
  • for i in range(0,5): webbrowser.open(links[i].get('href'))
【解决方案2】:

.link a 将做所有孩子a 标签与父母有类link。之间的空格实际上是css descendant combinator,这意味着 lhs 是父级,rhs 是子级。删除空间以应用于同一元素。请注意,您需要从匹配的标签中提取 href 属性。

links = [item['href'] for item in soup.select('a.link')]

如果需要按类指定父div,则为

.nested a.link

或者更简单

.nested .link

【讨论】:

  • 感谢您拓展我的视野 XD
  • div.nested>a.link 也一样吗?
  • 当然它更容易使用你的,但澄清这一点会很有帮助。
  • 这个网站是最好的 XD 对于我应该在发布的问题中搜索的滋扰感到抱歉
猜你喜欢
  • 2023-03-22
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 2011-02-07
相关资源
最近更新 更多