Python 抓取两种类型的URL';s

Python 抓取两种类型的URL';s,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,在中,在“依赖项”列表下有两种类型的URL。其中一个来自官方软件包网站(“”),另一个来自用户软件包网站(“”)。我想将它们提取为一个单独的列表。据我所知,到目前为止我提出了类似的想法: sauce = urllib.request.urlopen("https://aur.archlinux.org/packages/blockify/").read() soup = bs.BeautifulSoup(sauce, 'lxml') official_dependencies = [] aur_

在中,在“依赖项”列表下有两种类型的URL。其中一个来自官方软件包网站(“”),另一个来自用户软件包网站(“”)。我想将它们提取为一个单独的列表。据我所知,到目前为止我提出了类似的想法:

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/packages\u name/
而不是
https://aur.archlinux.org/packages/package_name/
。此外,在官方软件包名称旁边的括号中还写有一些aur依赖项。例如,
alsa utils(alsa utils透明)
。我想避免刮掉那些可选的aur包

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


谢谢

如果您不必遵守bs4,您可以尝试解决方案


感谢您提供非常直观的解决方案。但有一件事我不清楚。在您的代码中,有什么可以避免我想要避免的用括号括起来的aur链接呢?@Huzo,这些链接的父节点是
span
节点,因此它们没有XPath匹配,XPath应该是
//ul[@id=“pkgdepslist”]/li/span/a/@href
,我现在看到括号中的链接。请原谅我的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/']