gpt4 book ai didi

html - 使用 python 解析 HTML 的奇怪结构——第二个版本

转载 作者:行者123 更新时间:2023-11-28 01:32:50 25 4
gpt4 key购买 nike

我昨天问了一个问题,很明白,但我现在有一个更棘手的问题。

首先,展示我要解析的html结构

<body>
<div id="links">
<a href='url1'>apple-explain</a>
<blackquote>
<a href='url1'>link-1</a>
</blackquote>
</div>
<div id="info">
<p>apple</p></div>

<div id="links">
<a href='batch_url1'>bear-explain</a>
<blackquote>
<a href='url2'>link-1</a>
<a href='url3'>link-2</a>
</blackquote>
</div>
<div id="info">
<p>bear</p></div>

<div id="links">
<a href='url4'>cat-explain</a>
<blackquote>
<a href='url4'>link-1</a>
</blackquote>
</div>
<div id="info">
<p>cat</p></div>

<div id="links">
<a href='batchurl2'>duck-explain</a>
<blackquote>
<a href='url5'>link-1</a>
<a href='url6'>link-2</a>
<a href='url7'>link-3</a>
</blackquote>
</div>
<div id="info">
<p>duck</p></div>

<div id="links">
<a href='url8'>egg-explain</a></div>
<blackquote>
<a href='url8'>link-1</a>
</blackquote>
</div>
<div id="info">
<p>egg</p></div>
#etc
</body>

看起来有点长,但结构简单

<div id="links">
<a href=url>some explain</a>
<blackquote>
<a href=url>link number</a>
</blackquote></div>
<div id="info">
<p>info keyword</p></div>

我的目的是

“抓取 中的所有 url,删除重复项,并将它们与信息关键字匹配”。

例如,苹果部分有两个,但它们是相同的 href和熊部分,它有3个和3个href,一个在里面,两个在

我想清除元组并打印

元组是

(apple, url1)
(bear, [batch_url1, url2, url3])
etc...

打印的形式是

url1 = apple
batch_url1 = bear
url2 = bear
url3 = bear
etc

这是我的代码,

soup = BeautifulSoup("""that HTML""")
url_list = soup.find_all('div', attrs={'id': 'links'})
info_list = soup.find_all('div', attrs={'id': 'links'})

for url, info in zip(url_list, info_list):
for temp in url.find_all():
infokeyword = info.text
urls = temp.attrs['href']

zipped = zip(infokeyword, urls)
d=len(infokeyword)
for n in range(0, d+1):
print(str(infokeyword[n]) + " = " + str(urls[n])

运行时,结果如下:

Traceback (most recent call last):
File "D:/Users/Hyungsoo/PycharmProjects/untitled1/zx.py", line 59, in <module>
urls = temp.attrs['href']
KeyError: 'href'

我怎样才能做出这样的东西?

最佳答案

为了获得不同的url,你可以使用collections.defaultdict 设置default_factory

In [72]: from collections import defaultdict

In [73]: from bs4 import BeautifulSoup

In [74]: soup = BeautifulSoup("""<body>
....: <div id="links">
....: <a href='url1'>apple-explain</a>
....: <blackquote>
....: <a href='url1'>link-1</a>
....: </blackquote>
....: </div>
....: <div id="info">
....: <p>apple</p></div>
....:
....: <div id="links">
....: <a href='batch_url1'>bear-explain</a>
....: <blackquote>
....: <a href='url2'>link-1</a>
....: <a href='url3'>link-2</a>
....: </blackquote>
....: </div>
....: <div id="info">
....: <p>bear</p></div>
....:
....: <div id="links">
....: <a href='url4'>cat-explain</a>
....: <blackquote>
....: <a href='url4'>link-1</a>
....: </blackquote>
....: </div>
....: <div id="info">
....: <p>cat</p></div>
....:
....: <div id="links">
....: <a href='batchurl2'>duck-explain</a>
....: <blackquote>
....: <a href='url5'>link-1</a>
....: <a href='url6'>link-2</a>
....: <a href='url7'>link-3</a>
....: </blackquote>
....: </div>
....: <div id="info">
....: <p>duck</p></div>
....:
....: <div id="links">
....: <a href='url8'>egg-explain</a></div>
....: <blackquote>
....: <a href='url8'>link-1</a>
....: </blackquote>
....: </div>
....: <div id="info">
....: <p>egg</p></div>
....: #etc
....: </body>""")

In [75]: distinct_url = defaultdict(set)

In [76]: links = soup.select('div#links')

In [77]: infos = soup.select('div#info p')

In [78]: for k, v in zip(links, infos):
....: for l in k.find_all('a'):
....: distinct_url[v.text].add(l.attrs['href'])
....:

In [79]: distinct_url
Out[79]: defaultdict(<class 'set'>, {'apple': {'url1'}, 'duck': {'url5', 'url7', 'url6', 'batchurl2'}, 'bear': {'batch_url1', 'url3', 'url2'}, 'cat': {'url4'}, 'egg': {'url8'}})

In [80]: for info, lks in distinct_url.items():
....: for lk in lks:
....: print(info, lk)
....:
apple url1
duck url5
duck url7
duck url6
duck batchurl2
bear batch_url1
bear url3
bear url2
cat url4
egg url8

关于html - 使用 python 解析 HTML 的奇怪结构——第二个版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29739927/

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