gpt4 book ai didi

python - 在没有开始标签的情况下如何从汤中提取数据?

转载 作者:太空宇宙 更新时间:2023-11-03 14:00:16 26 4
gpt4 key购买 nike

我正在尝试从 Wikimedia Commons PDF-gallery 获取 PDF 信息。我成功提取了 PDF 的标题。但无法从那里获取其页面及其大小。因为没有<br>的开始标签但结束标签 <br/>存在。

我的代码;-

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import requests

bookUrl= u'https://commons.wikimedia.org/wiki/Category:அவ்வை தி. க. சண்முகம்'
#print (bookUrl)
bookContent = requests.get(bookUrl).content
bookSoup = BeautifulSoup(bookContent,'lxml')
bookdataSummary1 = bookSoup.findAll(id='mw-content-text')
for div in bookdataSummary1:
liAll = div.findAll('li')
for li in liAll:
pdfAllData1 = li.find('div',{'class':'gallerytext'})
print(pdfAllData1)
aOnly = pdfAllData1.find('a')
print(aOnly['title'])
break

输出;-

    <div class="gallerytext">
<a class="galleryfilename galleryfilename-truncate" href="/wiki/File:%E0%AE%8E%E0%AE%A9%E0%AE%A4%E0%AF%81_%E0%AE%A8%E0%AE%BE%E0%AE%9F%E0%AE%95%E0%AE%B5%E0%AE%BE%E0%AE%B4%E0%AF%8D%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%88.pdf" title="File:எனது நாடகவாழ்க்கை.pdf">எனது நாடகவாழ்க்கை.pdf</a>
819 × 1,236, 569 pages; 39.7 MB<br/>
</div>

File:எனது நாடகவாழ்க்கை.pdf

所需的输出;-

title="File:எனது நாடகவாழ்க்கை.pdf">எனது நாடகவாழ்க்கை.pdf</a>
819 × 1,236, 569 pages; 39.7 MB<br/>

如何提取结束标记之间的数据?即</a><br/> .

最佳答案

您可以通过多种方式获取所需的文本。

使用 .contents 属性

您可以使用.contents从标签中获取所需的内容。如果你检查 div 的内容标签( print(soup.div.contents) ),您将得到以下输出:

['\n', <a class="galleryfilename galleryfilename-truncate" href="/wiki/File:%E0%AE%8E%E0%AE%A9%E0%AE%A4%E0%AF%81_%E0%AE%A8%E0%AE%BE%E0%AE%9F%E0%AE%95%E0%AE%B5%E0%AE%BE%E0%AE%B4%E0%AF%8D%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%88.pdf" title="File:எனது நாடகவாழ்க்கை.pdf">எனது நாடகவாழ்க்கை.pdf</a>, '\n    819 × 1,236, 569 pages; 39.7 MB', <br/>, '\n']

从这里,您可以看到所需的内容位于第 3 个位置(第 2 个索引)。为此,您可以使用以下命令:

html = '''<div class="gallerytext">
<a class="galleryfilename galleryfilename-truncate" href="/wiki/File:%E0%AE%8E%E0%AE%A9%E0%AE%A4%E0%AF%81_%E0%AE%A8%E0%AE%BE%E0%AE%9F%E0%AE%95%E0%AE%B5%E0%AE%BE%E0%AE%B4%E0%AF%8D%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%88.pdf" title="File:எனது நாடகவாழ்க்கை.pdf">எனது நாடகவாழ்க்கை.pdf</a>
819 × 1,236, 569 pages; 39.7 MB<br/>
</div>
'''
soup = BeautifulSoup(html, 'lxml')
print(soup.find('div').contents[2].strip())
# 819 × 1,236, 569 pages; 39.7 MB
<小时/>

使用 NavigableString

info = ''.join([x.strip() for x in soup.find('div').contents if isinstance(x, NavigableString)])
print(info)
# 819 × 1,236, 569 pages; 39.7 MB

不要忘记将其导入为 from bs4 import BeautifulSoup, NavigableString

<小时/>

使用 .next_sibling 属性

另一种方法是使用 .

a_tag = soup.find('div').a
print(a_tag)
# <a class="galleryfilename galleryfilename-truncate" href="/wiki/File:%E0%AE%8E%E0%AE%A9%E0%AE%A4%E0%AF%81_%E0%AE%A8%E0%AE%BE%E0%AE%9F%E0%AE%95%E0%AE%B5%E0%AE%BE%E0%AE%B4%E0%AF%8D%E0%AE%95%E0%AF%8D%E0%AE%95%E0%AF%88.pdf" title="File:எனது நாடகவாழ்க்கை.pdf">எனது நாடகவாழ்க்கை.pdf</a>
info = a_tag.next_sibling
print(info.strip())
# 819 × 1,236, 569 pages; 39.7 MB
<小时/>

编辑:

使用上述任何一种技术,您都可以获得您想要的内容。所有 PDF 均位于 <div class="gallerytext"> 内标签。

完整代码:

r = requests.get(u'https://commons.wikimedia.org/wiki/Category:அவ்வை தி. க. சண்முகம்')
soup = BeautifulSoup(r.content, 'lxml')

for item in soup.find_all('div', class_='gallerytext'):
a_tag = item.a
print(a_tag['title']) # or print(a_tag['href']) if you want the link
info = a_tag.next_sibling.strip()
print(info)

输出:

File:எனது நாடகவாழ்க்கை.pdf
819 × 1,236, 569 pages; 39.7 MB
File:தமிழ் நாடகத் தலைமை ஆசிரியர்-1.pdf
637 × 957, 40 pages; 3.61 MB
File:தமிழ் நாடகத் தலைமை ஆசிரியர்-2.pdf
612 × 963, 67 pages; 9.32 MB
File:நாடகக்கலை-1.pdf
639 × 996, 161 pages; 6.35 MB
File:நாடகக்கலை-2.pdf
673 × 954, 155 pages; 7.22 MB
File:நாடகச்சிந்தனைகள்.pdf
715 × 1,047, 133 pages; 5.17 MB

关于python - 在没有开始标签的情况下如何从汤中提取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49297836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com