Beautiful Soup - 在 div 之后提取

Posted

技术标签:

【中文标题】Beautiful Soup - 在 div 之后提取【英文标题】:Beautiful Soup - extracting after the div 【发布时间】:2019-09-01 13:44:16 【问题描述】:
from bs4 import BeautifulSoup as Soup,Tag
import requests

url=r"https://en.wikipedia.org/wiki/Lists_of_tourist_attractions"

r = requests.get(url)
soup = Soup(r.content,"html.parser" )

for link in soup.find_all('a', href=True):
    print (link['href'])

for ul in soup.findAll('div'):
    print(ul.text)
    for li in ul.findAll('li'):
        print(li.text)

上面是一个工作代码。这可以使用任何***页面。 问题是: 我想得到 href 和标题彼此相邻。我无法得到这个。

在第二个 for 循环中,它将所有内容作为 div 并打印在一行中。

如何打印标题和 href 互相辅助(li 内容)

【问题讨论】:

您能更具体地说明您想要什么吗? how can I print title and href adjutant to each other (li contents)这句话我看不懂 您是否只想将寺庙列表打印出来,旁边有它们的网址? wiki中的有很多内容。它有标题和href。我正在考虑打印它们。 现在用我的程序我可以打印所有的href,所有的标题,但不能同时调整 是的,因为您将它们放在单独的循环中。你使用的逻辑太简单了。如果我是你,我至少会使用数组,并在抓取完成后打印数组。或者创建一个 txt 文件或其他东西并保持它的整洁 【参考方案1】:

也许这不是您想要的,但您可以试试这个。我对你的两个for 循环做了一个小修改:

for lnk in soup.findAll('a', href=True):
    title = (lnk.text)
    link = (lnk['href'])
    if title != '':
        print ("Title: , Link: https://en.wikipedia.org".format(title, link))

【讨论】:

这行不通...它只提供hrefs和tite 如果不是您要提取的 href 和 title,那么您的声明“我正在尝试将 href 和 title 放在一起。我无法得到这个”是什么意思。 我的意思是它不打印标题,而只是打印标题和href 好的,我做了进一步的修改【参考方案2】:

试试这个:

for link in soup.find_all('a', href=True):
    print (link.get('href') +'->' + link.get('title'))

顺便说一句,我建议使用wikipedia APIspecial:export 功能来访问数据。

https://www.mediawiki.org/wiki/API:Main_page https://en.wikipedia.org/wiki/Special:Export

【讨论】:

Thankq pankay 它可以工作,但为什么 url 不完整。它不见了en.wikipedia.org/wiki

以上是关于Beautiful Soup - 在 div 之后提取的主要内容,如果未能解决你的问题,请参考以下文章

Beautiful Soup 为特定的 div 找到孩子

使用 Beautiful Soup 获取所有 HTML 标签

在包含空格的类中使用Beautiful Soup

hdu 4781 Beautiful Soup 构造

Beautiful Soup 的 Python 正则表达式

用 Beautiful Soup 解析 HTML 中的 Data-Bind 标签