gpt4 book ai didi

python - 抓取两种类型的 URL

转载 作者:行者123 更新时间:2023-12-01 01:27:43 25 4
gpt4 key购买 nike

this page ,在“依赖项”列表下有两种类型的 url。其中一个来自官方包网站(“https://archlinux.org/packages/”),另一个来自用户包网站(“https://aur.archlinux.org/packages/”)。我想将它们提取为单独的列表。根据this documentation of BeautifulSoup ,到目前为止我想出了这样的东西:

sauce = urllib.request.urlopen("https://aur.archlinux.org/packages/blockify/").read()
soup = bs.BeautifulSoup(sauce, 'lxml')
official_dependencies = []
aur_dependencies = []

for h3 in soup.find_all('h3'):
if "Dependencies" in h3.text:
for url in h3.find_all_next('a', attrs={'href': re.compile("^https://www.archlinux.org/packages/")}):
official_dependencies.append(url.get('href'))

这很符合我的第一个目标。但我不确定应该如何提取 aur 依赖项,因为它们的 href 类似于 /packages/package_name/ 而不是 https://aur.archlinux.org/packages/package_name/。此外,还有一些 aur 依赖项写在官方包名称旁边的括号中。例如,alsa-utils (alsa-utils-transparent)。我想避免刮掉那些替代的 aur 包。

我对 bs4 比较陌生,不知道正则表达式,所以我对应该如何解决这个问题有点困惑。如果有人能告诉我解决这个问题的方法,我会很高兴。

谢谢

最佳答案

如果你不强制要求坚持bs4,你可以尝试lxml.html解决方案

from lxml import html

response = urllib.request.urlopen("https://aur.archlinux.org/packages/blockify/").read()
source = html.fromstring(response)

all_links = source.xpath('//ul[@id="pkgdepslist"]/li/a/@href')

simple_links = [link for link in all_links if link.startswith('https')]
aur_links = ['https://aur.archlinux.org' + link for link in all_links if not link.startswith('https')]

print(simple_links)
['https://www.archlinux.org/packages/?q=alsa-utils', 'https://www.archlinux.org/packages/?q=gst-python', 'https://www.archlinux.org/packages/?q=pygtk', 'https://www.archlinux.org/packages/?q=python-dbus', 'https://www.archlinux.org/packages/?q=python-docopt', 'https://www.archlinux.org/packages/?q=wmctrl', 'https://www.archlinux.org/packages/?q=python-setuptools', 'https://www.archlinux.org/packages/?q=pulseaudio']

print(aur_links)
['https://aur.archlinux.org/packages/spotify/']

关于python - 抓取两种类型的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53208027/

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